Использование столбца ts_vector для текстового поиска

Трудно найти информацию об этом ts_vector вещь, но в целях ускорения поиска адреса, простой индекс в адресной колонке на самом деле не дает удовлетворительных результатов.

Чтобы обойти это ограничение, я пытаюсь использовать ts_vector с помощью следующего запроса:

alter table mytable add tsv ts_vector;

update mytable set tsv = to_tsvector(address);

Я очень незнаком с этим ts_vector столбец, но будет ли это ускорить процесс, если я создам индекс btree (или любой другой индекс) и вместо того, чтобы запрашивать столбец адреса для запроса ts_vector колонка вместо?

2 ответа

Решение

Да, но это должен быть индекс GIN:

CREATE INDEX ON mytable USING gin (tsv);

Вам не нужно добавлять этот дополнительный столбец, вы также можете сделать:

CREATE INDEX ON mytable USING gin (to_tsvector('english', address));

Такой индекс можно использовать с @@ оператор.

Документация postgreSQL предполагает, что действительно быстрее использовать отдельный столбец tsvector:

Одним из преимуществ подхода с отдельными столбцами по сравнению с индексом выражения является то, что нет необходимости явно указывать конфигурацию текстового поиска в запросах, чтобы использовать индекс. Как показано в примере выше, запрос может зависеть от default_text_search_config. Еще одно преимущество заключается в том, что поиск будет выполняться быстрее, поскольку не потребуется повторно выполнять вызовы to_tsvector для проверки соответствия индексов. Однако подход с использованием индекса выражения проще в настройке и требует меньше места на диске, поскольку представление tsvector не сохраняется явно.

Источник: https://www.postgresql.org/docs/current/textsearch-tables.html .

Другие вопросы по тегам