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 ...
Другие вопросы по тегам