Задать вопрос
@eldar_web

Почему не используется GIN индекс в Postgresql с установкой веса?

Почему при индексе GIN (с установкой веса):
CREATE INDEX search_idx ON price_items USING GIN (setweight(to_tsvector('russian', make_name), 'A'), setweight(to_tsvector('russian', detail_name), 'B'));


При запросе:
SELECT * FROM price_items 
WHERE setweight(to_tsvector('russian', make_name), 'A') || setweight(to_tsvector('russian', detail_name), 'B') @@ plainto_tsquery('russian', 'отличное слово')
ORDER BY ts_rank(setweight(to_tsvector('russian', make_name), 'A') || setweight(to_tsvector('russian', detail_name), 'B'), plainto_tsquery('russian', 'отличное слово')) DESC;


Индекс не применяется? Что может быть? Как решить?
  • Вопрос задан
  • 171 просмотр
Подписаться 1 Средний Комментировать
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
index (func1, func2) - это в корне не то же самое что func1 || func2
Выражения для оператора разные, поэтому индекс отбрасывается как неподходящий.

В общем случае фильтр по выражению может работать по индексу только построенному в точности по такому же выражению.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы