2009-06-11 4 views
2

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

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

+0

Как структурируются ключи? буквенно-цифровой? int только? –

+0

Индекс построен на атрибуте текста типа. – 2009-06-11 05:16:25

+0

Пожалуйста, покажите нам результат «объясните анализ» вашего запроса. – Tometzky

ответ

0

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

1

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

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

0

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

Смежные вопросы