Postgres - Создать индекс для полнотекстового поиска, используя 3 + столбцы с to_tsvector - PullRequest
0 голосов
/ 07 февраля 2019

Все примеры в документации полнотекстового поиска Postgres показывают создание индекса путем объединения двух столбцов, но я не могу решить, как это сделать с 3+ столбцами.Пример из документации Postgres:

to_tsvector(title || ' ' || body)

Если у меня, например, есть другой столбец, который нужно искать по имени description, кажется, что этот синтаксис работает не так, как я ожидаю:

to_tsvector(title || ' ' || body || ' ' || description)

В результате я получаю такой индекс:

to_tsvector('english'::regconfig, ((("CompanyName" || ' '::text) || "Title") || ' '::text) || "Description")

Кажется, есть дополнительный набор паразитов, охватывающих блоки CompanyName и Title.

Любые идеи о том, что синтаксис должен быть здесь?У меня проблемы с поиском соответствующей документации по использованию дополнительных столбцов с to_tsvector.

1 Ответ

0 голосов
/ 07 февраля 2019

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

Индексированные выражения сохраняются не как текст, а как разобранная древовидная структура.Таким образом, он не нарушает индекс, если вы, например, переименуете используемый столбец.

Оператор конкатенации строк || остается ассоциативным, поэтому выражение в скобках идентично тому, которое вы изначально написали (сИсключение составляет конфигурация english, которая требуется для создания выражения IMMUTABLE, но я думаю, вы просто забыли об этом).

...