Использование столбца 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 .