Pull to refresh

Comments 12

Или что-то все же можно придумать для быстрого поиска?

Рассматривали ли вариант использования Elasticsearch?
Конечно, он используется у нас во многих проектах. Эту статью стоит расценивать не как готовую технологию для внедрения, а в качестве PoC и попытки решить проблему медленных FTS-поисков, раз уж такая возможность в PostgreSQL уже есть.

Отличная статья, спасибо!
Что если канонизировать текст перед постройкой индексов?
Имеется в виду привести все к единой форме: в именительный падеж, инфинитив и т.д. И вынести слова в отдельную таблицу, в связующей таблице хранить id слова и id текста, в котором оно встречается.
Соответственно и строку поиска нужно канонизировать.
Конечно, это потребует средства NLP и, скорее всего, подготовку текстов нужно реализовывать за пределами постгреса, но это будет нести определенные выгоды при поиске, а так же, по идее, должно потреблять меньше места и быть сопоставимо по производительности

В статье в индексах и в самом запросе используют to_tsvector, он и приводит все в инфинитив, именительный падеж и окончания откидывает. В статье используют словарь 'simple', в postgres должны быть словари для разных языков.
Имеется в виду привести все к единой форме: в именительный падеж, инфинитив и т.д. И вынести слова в отдельную таблицу, в связующей таблице хранить id слова и id текста, в котором оно встречается.
Собственно, это ровно то, что происходит «внутри» gist-индекса по to_tsvector('russian', str).

Подробнее можно почитать про конфигурации текстового поиска.

Спасибо за пояснения!

Спасибо за статью, решение интересное и 2мс впечатляет

Возможно оффтопик, мне очень интересно как живется когда все переменные в одну-две буквы, проходит ли такое ревью, можно ли привыкнуть с таким кодом работать? Имею в виду p[0] >= ps[0], src.ps <-> kw.p, dc, T(kw, dt) и тп.

Ещё интересно что побуждает, знаю что математики используют такое именование, или автор печатает медленно и лишняя буква — лишнее время.
как живется когда все переменные в одну-две буквы, проходит ли такое ревью, можно ли привыкнуть с таким кодом работать?
Как известно, «на вкус и цвет». Если использовать вполне стандартные сокращения типа dt — date, kw — keyword, T — для принудительного алиаса внутри FROM, то эффективность чтения таких запросов не страдает нисколько, зато гораздо меньше шансов наступить на reserved keywords.
пг почти плевать на reserved keywords
Кстати, да, спасибо за напоминание про него — забываю все время, поскольку требует сборки-установки, что резко ограничивает область использования. Готовых бинарников случайно нету?

Было бы идеально его в стандартные дистрибутивы дотащить по модели btree_gist — сделал просто CREATE EXTENSION — и счастье.
Sign up to leave a comment.