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.
Кстати, да, спасибо за напоминание про него — забываю все время, поскольку требует сборки-установки, что резко ограничивает область использования. Готовых бинарников случайно нету?

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