172 похожих чатов

Товарищи, кто-нибудь работал с полнотекстовым поиском в постгрес?

26 ответов

16 просмотров

Нет, там по приколу товарищи написали десятки тысяч строк кода вместе с кучей документацыи и примеров.

Eshu-Marabo Автор вопроса
Eshu Marabo
В документации к постгресу?

FTS вполне сносно документирован (в т.ч. на русском языке — https://postgrespro.ru/docs/postgresql/13/textsearch). А что вас интересует то? Задавайте сразу конкретный вопрос/озвучивайте проблему. Тут и разработчики FTS в чате есть, и те кто просто работает с искомым.

+

+

Eshu-Marabo Автор вопроса
Petr
FTS вполне сносно документирован (в т.ч. на русско...

Про полнотекстовой поиск, вопросы: 1. Адекватно ли он работает для русского языка, а если нет, то как тюнить? 2. Для векторизации текстов используется единый словарь для всей базы или для каждой ячейки text векторизация строится отдельно? 3. Пригодны ли результаты векторизации для дальнейшего использования в машинном обучении?

Eshu Marabo
Про полнотекстовой поиск, вопросы: 1. Адекватно ли...

> 1. Адекватно ли он работает для русского языка, а если нет, то как тюнить? Как мне кажется, не очень. "Тюнить" можно созданием адекватного словаря русского языка, например (и, прежде чем Вы спросите, нормальных словарей вообще нет в свободном доступе, насколько мне известно). Кроме того, это зависит от того, какой именно поиск / какая обработка Вам нужны (т.к. есть возможность создавать свои "конвейеры" для векторизации текстов). > 2. Для векторизации текстов используется единый словарь для всей базы Есть конфигурация для всей базы по умолчанию. А дальше всё зависит только от Вашей фантазии (и упорства в реализации) — можете векторизовать хоть куски полей в конкретных записях конкретных таблиц. ;) Но обычно используют единую конфигурацию для всей базы плюс, возможно, отдельные для некоторых полей некоторых таблиц. > или для каждой ячейки text векторизация строится отдельно? Вы реляционную СУБД с Excel не путаете, случайно? ;) > 3. Пригодны ли результаты векторизации Всё что угодно пригодно "для дальнейшего использования в машинном обучении", IMNSHO. Качество результата — как всегда. ;)

Eshu-Marabo Автор вопроса
Yaroslav Schekin
> 1. Адекватно ли он работает для русского языка, ...

@EshuMarabo 1. постгресПро гитхабе выкладывали адаптированные словари из OpenOffice. Они выделяют корни слов, а не отрезают "что-то похоже на окончание". 2. "Для каждой ячейки" можно, но сложно: нужно как-то понимать, по каким правилам строите поисковый запрос и вектор. Самый лобовой вариант - хранить в столбце рядом. create table test ( config text, message text ) select *, to_tsvector(config::regconfig, message), to_tsquery(config::regconfig, 'Елки & зелёные') from test config message to_tsvector to_tsquery english The Fat Rats 'fat':2 'rat':3 'ёлки' & 'зелёные' russian The Fat Rats 'fat':2 'rat':3 'ёлки' & 'зелён' english Ёлки зелёные 'зелёные':2 'ёлки':1 'ёлки' & 'зелёные' russian Ёлки зелёные 'зелён':2 'ёлки':1 'ёлки' & 'зелён' И индекс по такому запросу едва ли будет использоваться, так что либо делаем универсальный словарь на все нужные нам языки, либо делаем по запросу на каждый язык.

Евгений Смирнов
@EshuMarabo 1. постгресПро гитхабе выкладывали ада...

> адаптированные словари из OpenOffice. И словари эти (а это те, которые AOT) — дрянь, Вы меня извините. Вы сами-то с ними разбирались? > а не отрезают "что-то похоже на окончание". А тут о чём речь, кстати? Т.е. чем Вы сравниваете? > 2. "Для каждой ячейки" можно, но сложно Ну да, но тоже я имел в виду самый простой вариант, как Вы и написали: > Самый лобовой вариант - хранить в столбце рядом.

Yaroslav Schekin
> адаптированные словари из OpenOffice. И словар...

> А тут о чём речь, кстати? Т.е. чем Вы сравниваете? Со стандартными Snowball. Едва ли что-то может быть хуже них.

Евгений Смирнов
> А тут о чём речь, кстати? Т.е. чем Вы сравнивает...

Ну так это просто стеммер, который пытается работать вообще без словаря (см. https://snowballstem.org/algorithms/russian/stemmer.html ), чего от него вообще можно хотеть? ;) <sarcasm>И, тем не менее, на некоторых словах даже он работает лучше, чем это "чудо" из OpenOffice.</sarcasm>

Yaroslav Schekin
Ну так это просто стеммер, который пытается работа...

0_о а вы эти слова ещё помните? Хочется глянуть, насколько адекватно они обрабатываются лемматизатором сфинкса.

Евгений Смирнов
0_о а вы эти слова ещё помните? Хочется глянуть, н...

А зачем что-то помнить? Вот скачайте и посмотрите postgrespro/hunspell_dicts/master/hunspell_ru_ru_aot/ru_ru_aot.dict Вот "случайный" пример оттуда: агрегатор агрегатора агрегаторам агрегаторами агрегаторах агрегаторе агрегаторов агрегатором агрегатору агрегаторы Stemming my eye. ;(

Ilya Anfimov
А что в этом примере не так?

То, что основа слова агрегаторами — это агрегаторами, а вот агрегаторах — это совсем другое слово (по мнению составителей словаря).

Eshu-Marabo Автор вопроса
Yaroslav Schekin
> 1. Адекватно ли он работает для русского языка, ...

А мб кто в курсе, полнотекстовой поиск на русском в postgres pro работает лучше?

Eshu-Marabo Автор вопроса
Евгений Смирнов
@EshuMarabo 1. постгресПро гитхабе выкладывали ада...

А вы не в курсе, можно ли создать словарь, пропускающий только определенные слова?

Eshu-Marabo Автор вопроса
Евгений Смирнов
По идее - да.

Я просто даже хз с какой стороны поступаться (

Eshu Marabo
Я просто даже хз с какой стороны поступаться (

Судя по доке - создать цепочку из двух простых словарей: первый с accept = false и всеми словами в списке стоп-слов, CREATE TEXT SEARCH DICTIONARY public.simple_dict ( TEMPLATE = pg_catalog.simple, STOPWORDS = mydict ); ALTER TEXT SEARCH DICTIONARY public.simple_dict ( Accept = false ); А за ним ещё один который всё пропускает.

Eshu-Marabo Автор вопроса
Eshu Marabo
А можно для дебилов ссылку на документацию?(

https://postgrespro.ru/docs/postgresql/10/textsearch-dictionaries#TEXTSEARCH-SIMPLE-DICTIONARY

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта