我是否可以保证每个包含所有查询词的文档总是比具有较少查询词的文档得分更高?
请注意,我不想坚持使用 AND 语义。如果没有任何文档与所有查询条件匹配,我仍然想显示结果。
最佳答案
您可以尝试的一件事(安全、快速)是子类化 DefaultSimilarity 并调整协调因子的计算。默认计算是基本分数(因此,例如,仅匹配 3 个术语中的 2 个术语的文档仍然获得 2/3 的协调因子,作为匹配所有 3 个术语的协调因子)。
如果这个因素(匹配所有查询词)对您很重要,那么我建议您显式地增强与所有查询词匹配的文档,下面是一个示例,它将任何文档的分数再次减半不匹配所有查询条件。
例如:
@Override
public float coord(int overlap, int maxOverlap) {
return (overlap == maxOverlap)
? 1f
: 0.5f * super.coord(overlap, maxOverlap);
}
此因素在此处有更详细的描述:Lucene Similarity javadocs
关于java - Lucene 的 AND/OR 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5750401/