Медленный нечеткий поиск с использованием триграмм PostgreSQL на длинных текстовых полях - PullRequest
0 голосов
/ 06 июля 2019

Я вижу медленные запросы (~ 20 секунд), когда я выполняю нечеткий текстовый поиск по относительно небольшому набору записей (8 КБ) в PostgreSQL.Я установил индексы триграмм GIN и GIST и подтвердил через ANALYZE, что они используются.Производительность, по-видимому, определяется небольшим количеством записей с очень длинными текстовыми полями.В то время как большинство записей менее 2 000 символов, около 200 более 10 000, а немногим более 20 000.Усечение этих длинных строк до 10 тыс. Символов сокращает время запроса до 8 с.

Я пробовал PostgreSQL 10 и 11, индексы GIN и GIST, без существенного изменения производительности.

Я пытался разбить текстовое содержимое на большее количество записей, с каждымзапись намного меньше.Поиск этого же текста, распределенного по множеству других записей, приводит к получению запросов в секунду.

Запрос совершенно ничем не примечателен:

select title, 
'orthopedic surgeon' <<-> content as sml
from answers
where 'orthopedic surgeon' <% content
order by sml desc

При таком небольшом количестве записей я ожидаю, что индекс триграмм даст почти мгновенные результаты, даже если в моих текстовых полях более 30 тыс. Символов,Я не ожидаю более быстрых запросов, разбивая контент на большее количество записей.Нормально ли это исполнение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...