如果我使用复合查询,我需要知道 Lucene 如何对结果集中的记录进行排序。
看起来它使用“分数”值对精确查询进行排序,并按字典顺序对范围查询进行排序。但是如果查询看起来像
q = type:TAG OR type:POST AND date:[111 to 999]
如果我使用复合查询,我需要知道 Lucene 如何对结果集中的记录进行排序。
看起来它使用“分数”值对精确查询进行排序,并按字典顺序对范围查询进行排序。但是如果查询看起来像
q = type:TAG OR type:POST AND date:[111 to 999]
您将逻辑搜索和评分混合在一起。当您传递查询 likedate:[111 to 999]
时,Lucene 会搜索日期在指定范围内的所有文档。但是您没有就如何对它们进行排序给出任何建议-日期 111 比 555 更适合您吗?还是701比398好?Lucene 对此一无所知,因此所有找到的文档的分数都是相同的。只是为了进行排序,Lucene 按字典顺序对结果进行排序,但这主要是实现的细节,而不是一些关键思想。
另一方面,如果您通过查询传递一些其他参数 - 无论是关键字还是标签 - Lucene 可以应用其相似性算法并为结果中的不同文档分配不同的分数。您可以在此处找到有关 Lucene 评分的更多信息。
所以,给你一个简短的回答:Lucene 按分数对结果进行排序,只有当 2 个文档的分数相同时,它才会使用其他类型的排序选项,如字典顺序。