Postgres TextSearch не фильтрует отдельные записи
Мы пытаемся отсеять дубликаты в определенном столбце с помощью текстового запроса.
Вот пример запроса:
SELECT
distinct on (title) title",
ts_rank_cd(to_tsvector(title), query, 1) AS rank
FROM
products,
to_tsquery('english',''english','Ribeye | Starter | Cheese | Assortment'') query
WHERE
query @@ to_tsvector(title) AND
book_id = '37' as result
ORDER BY
rank DESC limit 10 offset 0
По какой-то причине мы все еще получаем случайные дубликаты заголовков при использовании поиска TEXT.
Результаты в:
"Ribeye Starter Cheese Assortment"
"Filet Mignon Starter Cheese Assortment"
"Ambassadors Assortment"
"Ambassadors Assortment"
"Strip Steak Starter Cheese Assortment"
"After Dinner Cheese Assortment"
"Ambassadors Assortment"
"Chairmans Assortment"
Использование отличного без TSVectors работает нормально, но введение поиска текста игнорирует ключевое слово PostGres Distinct.
Есть идеи?
1 ответ
У меня нет psql передо мной, чтобы проверить... но эта строка из документов попалась на глаза:
Выражения DISTINCT ON должны соответствовать крайнему левому выражению ORDER BY. Предложение ORDER BY обычно содержит дополнительные выражения, которые определяют желаемый приоритет строк в каждой группе DISTINCT ON.
Так что просто добавьте "заголовок" к ORDER
:
... ORDER BY title,rank DESC ...