我正在尝试使用PostgreSQL实现增量搜索。我遇到的问题是结果排名。我希望完整比赛的排名高于部分比赛,但我真的不知道该怎么做。例如,在此查询中(以显示用户输入查询时事物的排名方式):
select
ts_rank_cd(to_tsvector('hello jonathan'), to_tsquery('jon:*')),
ts_rank_cd(to_tsvector('hello jonathan'), to_tsquery('jonath:*')),
ts_rank_cd(to_tsvector('hello jonathan'), to_tsquery('jonathan:*'))
或反之(显示不同文档如何对同一查询进行排名)
select
ts_rank_cd(to_tsvector('hello jon'), to_tsquery('jon:*')),
ts_rank_cd(to_tsvector('hello jonah'), to_tsquery('jon:*')),
ts_rank_cd(to_tsvector('hello jonathan'), to_tsquery('jon:*'))
所有排名均返回0.1。我将如何使更完整的结果排名更高?
答案 0 :(得分:0)
我会尝试使用pg_trgm中的运算符来打破ts_rank_cd之间的联系。也许“ <->>>”运算符(在v11中引入)可能是我的首选:
select
'hello jon' <->>> 'jon:*',
'hello jonah' <->>> 'jon:*',
'hello jonathan'<->>>'jon:*';
?column? | ?column? | ?column?
----------+------------+----------
0 | 0.57142854 | 0.7
请注意,这返回的是距离,而不是相似度,因此,越低越好。