2013-04-04 53 views
0

我们正在尝试使用文本查询清除特定列上的重复项。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 

出于某种原因,使用文本搜索时,我们仍然收到偶尔重复的标题。

结果:

"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表达式匹配( S)。 ORDER BY子句通常包含额外的表达式,这些表达式决定了每个DISTINCT ON组内行的期望优先级。

所以刚才添加的 “头衔” 的ORDER

... ORDER BY title,rank DESC ...