Задать вопрос
@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;


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

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

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

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