Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
09.01.2020, 23:34
|
|||
---|---|---|---|
Полнотекстовый поиск (опять), но не могу разобраться |
|||
#18+
Господа, прошу помощи разобраться в основах полнотекстового поиска. PS: собирал инфу и тут и в доке и даже на хабре Что дано: 1) Postgres v10 2) текстовый поиск по одной таблице и даже по одному полю (пусть это будет "u_name") 2.1) кол-во записей в таблице сейчас 200к, но будет "контролируемо" расти до нескольких миллионов (я её "наполняю") 2.2) кол-во символов в поле по которому происходит поиск от 10 символов до 300 символов. тип "text" 2.3) значения в этом поле есть как русские так и английские слова (ну и цифры в меньшей степени и не всегда) 2.4) таблица содержит вспомогательные поля типа integer и обогощения с типом text. 3) поиск запихнут в хранимки (plpgsql) Сначала для поиска я использовал расширение pg_trgm и юзал функцию similarity , но со временем понял что она мне не подходит (к примеру проблема из п. 2.2. приходилось танцы с бубном). И вот попался мне FTS и слепил вот такой запрос: Код: plsql 1. 2. 3.
И я понимаю, что это далеко не всё что надо было сделать, или сделал вообще правильно (хоть и работает). Напомню, что поле у меня с типом text И вот собственно дальше я запутался. 1) Правильно ли я понимаю, что в моём случае, лучше добавить новое поле в таблицу с типом tsvector и каким-то чудным образом заполнить эту полянку? (но каким способом я так и не понял). Или лучше вывести в отдельную таблицу с ключами на основноую и проводить поиск уже по ней и в основную лазить "потом" когда нужно будет обогатить данными (главное найти id-шники) 2) Что необходимо подтюнить (конфиги самого постгреса) для более эффективной работы этого полнотекстового поиска (конкретно именно для работы этой составляющей). 3) Можно как-то сделать (дополнить) словами синонимами не однозначно определяемые из поискового значения. К примеру есть слово "МТС", то это можно найти следующими словами "MTS" или "vnc" или "яйцо" или "красный" и т.д. чтобы руками можно было бы приписать слова синомимы Рад буду мыслям, идеям, опыту, ссылкам (вдруг будут которые еще не прочитал и там будет всё примитивно расписано). Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
14.01.2020, 09:33
|
|||
---|---|---|---|
Полнотекстовый поиск (опять), но не могу разобраться |
|||
#18+
Вдруг кому-то будет полезно: 1. создал отдельную таблицу с нужным мне id и отдельным поле с типом tsvector . Прогнал в цикле по первой таблице, вызвав функцию to_tsvector() и заполнил новую таблицу. 2. Натравил индекс GIN на это поле в таблице. ИТОГ: скорость поиска повысилась в разы (с 50мс до 0.5мс). 3. руками (для эксперимента) вбил в значение поля tsvector явные синонимы с позициями 1 и теперь у меня "находит" по словам, которых нет в явном виде. т.е. механика отработана. Пока до конфигов не добрался, думаю вопрос времени или всё же кто-нибудь подскажет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=53&mobile=1&tid=1994872]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 297ms |
total: | 429ms |
0 / 0 |