Sphinx 并先按 AND 然后按 OR 的组合查询排名结果

Sphinx and query for ranked results by first AND and then combinations of OR

我认为这是相当常见的情况,但就是想不通也找不到任何相关信息。

假设我有以下文本:

我想不通查询,returns 按以下顺序发短信:

1) 首先包含所有三个 'dog'、'cat' 和 'mice'、

的所有文本

2) 然后所有包含每对 ('dog', 'cat'), ('dog', 'mice'), ('cat', 'mice') 排名不分先后

3) 然后是包含 'dog'、'cat' 或 'mice'

中任何一个的所有文本

因此,针对给定文本的此类查询结果应该是这样的(最好先是较短的文本,但不一定)

有人可以帮我吗?

一般来说,它有两个部分,匹配和排名。

对于匹配,您只需要包含至少一个单词的文档(即接受包含其中一个单词的文档)。仲裁运算符可能是最简单的方法,但其他一些方法也可以。

... MATCH(' "dog cat mice"/1 ') 

然后你想让单词最多的 (3) 先显示 - 这大约是 排名 http://sphinxsearch.com/docs/current.html#ranking-overview

总的来说,WordCount Ranker 很适合您的情况

... OPTION ranker=wordcount

但是阅读上面关于排名的部分,可以进行更详细的排名。

对于排名,您需要考虑 sphinx 如何计算每个结果的分数,然后按权重降序排列结果。 (相对于“这个,然后那个,然后那个”。)


编辑添加:您提到 dog 是一个查询词,但有包含 dogs 的文档,所以一定要查看形态学和词干来解释这一点。 http://sphinxsearch.com/docs/current.html#conf-morphology