Postgresql 是否可以在Postgres全文搜索中对部分匹配项进行排名?
我试图计算全文匹配的Postgresql 是否可以在Postgres全文搜索中对部分匹配项进行排名?,postgresql,full-text-search,Postgresql,Full Text Search,我试图计算全文匹配的ts\u秩,其中查询中的某些术语可能不在要匹配的ts\u向量中。我希望在一场单词较多的比赛中排名更高。看起来很简单 因为不是所有的术语都必须匹配,所以我必须操作数,以提供一个查询,例如to_tsquery('one | two | three')(如果是&,则所有的都必须匹配) 问题是,无论有多少单词匹配,排名值似乎都是相同的。换句话说,它是最大化,而不是乘以子句 选择ts_rank('一二三'::tsvector,to_tsquery('1')给出0.0607927 选择t
ts\u秩
,其中查询中的某些术语可能不在要匹配的ts\u向量
中。我希望在一场单词较多的比赛中排名更高。看起来很简单
因为不是所有的术语都必须匹配,所以我必须
操作数,以提供一个查询,例如to_tsquery('one | two | three')
(如果是&
,则所有的都必须匹配)
问题是,无论有多少单词匹配,排名值似乎都是相同的。换句话说,它是最大化,而不是乘以子句
选择ts_rank('一二三'::tsvector,to_tsquery('1')代码>给出0.0607927
选择ts|rank('一两三'::tsvector,to|tsquery('一|二|三|四')代码>
给出预期的较低值0.0455945
,因为'four'不是向量
但是选择ts_rank('一两三'::tsvector,to_tsquery('一|二')代码>
给出0.0607927
,同样
选择ts|rank('一两三'::tsvector,to|tsquery('一|二|三')代码>
给出0.0607927
如果匹配更多术语,我希望ts_rank
的结果更高
可能吗
针对一个可能的响应:我无法计算搜索查询的所有可能子序列作为交点,然后将它们全部合并到一个查询中,因为我将处理大型查询。我敢肯定,不管怎么说,有很多理由反对这一点
编辑:我知道ts_rank\u cd
,但它并不能解决上述问题。我得出的结论是&
将项目放在一起进行排名。在我的select查询(我正在使用它进行搜索)中,项目是|
ed。这似乎有效。使用扩展名(仅linux AFAIK,由带来文本搜索的同一人编写)
它具有计算阵列之间TFIDF、余弦或重叠相似性的函数。它支持索引,所以速度很快
另一种方法是在使用查询之前对其进行“拼写检查”,基本上删除不在语料库中的任何查询词 非常感谢。四年前我遇到了一个问题,很奇怪能找到答案!