【发布时间】:2010-02-21 00:43:29
【问题描述】:
我正在尝试为全文匹配计算ts_rank,其中查询中的某些术语可能不在与之匹配的ts_vector 中。我希望在匹配更多单词的比赛中排名更高。看起来很简单?
因为不是所有的术语都必须匹配,所以我必须| 操作数,才能给出诸如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 的预期较低值,因为 'four' 不是向量。
但是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,但它不能解决上述问题。
【问题讨论】:
标签: postgresql full-text-search