我试图计算一个全文匹配的ts_rank
,其中查询中的某些术语可能不在与其匹配的ts_vector
中。我希望在更多单词匹配的比赛中排名更高。看起来很简单?可能在Postgres全文搜索中对部分匹配进行排名?
因为不是所有的条件都必须匹配,所以我必须|
的操作数,给出如to_tsquery('one|two|three')
(如果它是&
,所有都必须匹配)的查询。
问题是,无论有多少单词匹配,排名值似乎是相同的。换句话说,它是最大的而不是乘以子句。
select ts_rank('one two three'::tsvector, to_tsquery('one'));
给出0.0607927
。
select ts_rank('one two three'::tsvector, to_tsquery('one|two|three|four'));
给出了预期的较低值0.0455945
,因为'四'不是矢量。
但select ts_rank('one two three'::tsvector, to_tsquery('one|two'));
给0.0607927
,同样
select ts_rank('one two three'::tsvector, to_tsquery('one|two|three'));
给0.0607927
我想的ts_rank
的结果是如果有更多的条件匹配更高。
可能吗?
为了反击一个可能的反应:我无法计算搜索查询的所有可能子序列作为交集,然后将它们全部结合在一个查询中,因为我将要处理大量查询。无论如何,我肯定有很多争论!
编辑:我知道ts_rank_cd
但它不能解决上述问题。
非常感谢。奇怪的是,看到四年前我遇到的问题的答案! – Joe 2014-07-30 09:22:33
我喜欢冷酷的情况 – 2014-07-30 17:09:55