假设Solr索引中有以下网页集合:
+-----+----------+----------------+--------------+
| ID | Domain | Path | Content |
+-----+----------+----------------+--------------+
| 1 | 1.com | /hello1.html | Hello dude |
| 2 | 1.com | /hello2.html | Hello man |
| 3 | 1.com | /hello3.html | Hello fella |
| 4 | 2.com | /hello1.html | Hello sir |
...
我想要一个hello
的查询来显示按域分组的结果,比如:
Results from 1.com:
/hello1.html
/hello2.html
/hello3.html
Results from 2.com:
/hello1.html
如果我按分数排序,排序是如何确定的?我通常使用TF/IDF和PageRank的组合来计算结果,但由于这会计算每个项目的分数,它如何决定如何排序垃圾?如果1.com/hello3.html和1.com/hello2.html的相关性很低,但有两个结果,而2.com/hello1.html的相关性很高,但只有一个结果,该怎么办?反之亦然?或者,当一个分组字段中有多个项目时,相关性是否相加?
我环顾四周,但一直没能找到一个好的答案。
谢谢。
在我看来,您正在使用Result Grouping。如果是这种情况,则根据sort
参数对组进行排序,并且根据group.sort
参数对每个组中的记录进行排序。如果按sort=score desc
对组进行排序(这是默认值,因此实际上不需要指定它),则它会根据每组的分数对组进行分类。这个分数是如何确定的还不太清楚,但如果你浏览链接文档中的示例,你可以看到以下语句:
组按每组中最前面文档的分数排序。
因此,在您的示例中,如果2.com的hello1.html是您的结果集中最相关的文档,则"来自2.com的结果"将是您最相关的组,即使"来自1.com的结果数"包含文档数的三倍。
如果这不是您想要的,那么最好的选择是提供不同的sort
参数或结果后处理。例如,对于我参与的一个项目(我们有非常少量的组),我们选择提取每组的前三个结果,在后处理中,我们根据组的得分和numFound值的组合计算出组的排序顺序。对于群体过多的案件来说,这种策略可能是令人望而却步的,如果数量更多的群体冒着让最相关的文件更难找到的风险,这可能不是一个好主意。