Есть ли нечеткое совпадение postgres быстрее, чем pg_trgm? - PullRequest
3 голосов
/ 11 июня 2009

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

Есть ли более быстрый способ сделать нечеткое совпадение в Postgres?

Ответы [ 3 ]

2 голосов
/ 13 июня 2009

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

Это заставляет Postgresql использовать неверный план запроса. Попробуйте отключить растровое сканирование (установите enable_bitmapscan = off) и повторите попытку.

0 голосов
/ 28 августа 2009

В зависимости от того, что вы ищете, Postgres может также выполнять сопоставления с регулярными выражениями вместо стандартного синтаксиса «like». Это может быть лучше для вас.

0 голосов
/ 13 июня 2009

Soundex - альтернативное нечеткое совпадение, но оно может быть очень нечетким. Я бы придерживался соответствия триграмм, если вы можете. Есть ли другой критерий, который вы могли бы использовать, чтобы поиск триграмм работал на меньшем наборе результатов?

...