Lucene与AND / OR的问题

时间:2011-04-21 22:21:58

标签: java lucene

无论如何,我可以保证所有查询字词的文档总是高于查询字词较少的文档吗?

请注意,我不想坚持使用AND语义。如果没有任何文档符合所有查询字词,我仍然希望显示结果。

1 个答案:

答案 0 :(得分:3)

你可以尝试的一个(安全,快速)的东西是子类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