Postgres индексация полнотекстового поиска по нескольким столбцам - PullRequest
0 голосов
/ 10 января 2020

Я заинтересован в применении индекса для запросов по нескольким столбцам с использованием полнотекстового поиска Postgres.

. В соответствии с документами , я мог бы применить многостолбцовый индекс, например: Итак:

CREATE INDEX pgweb_idx ON pgweb USING GIN (to_tsvector('english', title || ' ' || body));

но я не совсем понимаю, когда этот индекс будет фактически использоваться. Должна ли функция to_tsvector, используемая в предложении WHERE, быть точно в том же формате, что и в индексе?

SELECT title FROM pgweb WHERE to_tsvector(title || ' ' || body) @@ to_tsquery('something')

Будут ли следующие запросы по-прежнему использовать индекс?:

SELECT title FROM pgweb WHERE to_tsvector(coalesce(title,'') || ' ' || coalesce(body,'')) @@ to_tsquery('something')
SELECT title FROM pgweb WHERE to_tsvector(body) @@ to_tsquery('something')

1 Ответ

1 голос
/ 10 января 2020

Должна ли функция to_tsvector, используемая в предложении WHERE, быть точно в том же формате, что и в индексе?

Да. Он будет игнорировать такие вещи, как различия между пробелами и лишние скобки. Но кроме этого они должны быть одинаковыми.

Будут ли следующие запросы по-прежнему использовать индекс?:

Нет.

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

...