2017-09-27 121 views
0

在我的SOLR索引中,我有许多字段组成的文档:name,title,description,tags等我想按照匹配的字段数排序文档查询,但不希望考虑匹配项出现在字段中的次数(因此没有TFIDF,没有BM25)。Apache Solr:按照与查询匹配的字段数排序

例如:

Documents: 
ID: 100, title: "foo foo bar bar", name: "foo bar" 
ID: 101, title: "foo bar", name: "gibberish foo" 
ID: 102, title: "foo bar", name: "foo bar" 

当我搜索 “FOO栏”,我想的结果,按该顺序进行排序:

  1. 102(两个字段匹配)
  2. 100(还有两个字段匹配,所以100和102应该完全相同)
  3. 101(一个字段匹配)

我该如何用SOLR来实现?什么应该是sort条款?

回答

1

您可以尝试通过使用像(tags:stack)^=1这样的常量分数查询来禁用术语频率。请注意,这是一种特殊的语法。然后使用eDisMax查询解析器,并在qf中指定这些字段,可能会加上一些提示,并为tie指定一个值,如1。这需要确保所有子查询(字段)都用于计算得分。

这应该做你想做的事,因为更多的匹配字段会导致更高的分数,并且词频不再用于评分。