Каков подходящий индекс для текстового поля в базе данных postgres? - PullRequest
2 голосов
/ 15 ноября 2010

У меня есть база данных, в которой хранится информация о кодах Chekins из различных SCR. Одна из таблиц в этом хранилище базы данных фиксирует комментарии для каждой регистрации. Я пытаюсь разработать функцию поиска, которая с помощью нотации Postgres posix просматривает эту таблицу, пытаясь сопоставить регулярное выражение в этом поле комментария и вернуть все совпадающие.

Я уже заставил это работать, но главная проблема здесь - выполнение этого поиска. Для довольно большой базы данных поиск занимает почти 15-20 минут, а веб-интерфейс ожидает результата, что является совершенно неприемлемым временем для базы данных среднего размера. Я подумал, что создание индекса для этого текстового поля может помочь, но я не могу создать индекс btree, потому что данные для некоторых строк слишком велики, чтобы potgres не мог создать индекс для него.

Есть ли другое решение для этого? Могут ли быть созданы какие-либо другие индексы, которые также не должны зависеть от языка?

Ответы [ 4 ]

2 голосов
/ 15 ноября 2010

Проверьте функции полнотекстового поиска , регулярные выражения не могут использовать индексы.

1 голос
/ 13 сентября 2012

Теперь вы можете использовать расширение pg_trgm.

Документация:

http://www.postgresql.org/docs/9.1/static/pgtrgm.html

Хорошая начальная точка:

http://www.depesz.com/2011/02/19/waiting-for-9-1-faster-likeilike/

0 голосов
/ 16 ноября 2010

Другие упоминали полнотекстовый поиск. Если вам нужны регулярные выражения, а не полнотекстовый поиск, то нет способа их проиндексировать в общем виде. Пока выражение привязывается в начале строки (используя ^ в начале), индекс обычно можно использовать, но для универсальных регулярных выражений нет способа использовать индекс для их поиска.

0 голосов
/ 16 ноября 2010

Да, здесь вы найдете полнотекстовый поиск. PostgreSQL обладает довольно надежной и быстрой возможностью FTS.

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