java - Lucene 的 AND/OR 问题

标签 java lucene

我是否可以保证每个包含所有查询词的文档总是比具有较少查询词的文档得分更高?

请注意,我不想坚持使用 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/

相关文章:

java - 如何访问 Spring-ws 端点中的 HTTP header ?

.net - 如何按相关性和 Lucene.net 中的另一个字段对搜索结果进行排序

java - 在 Lucene 4 索引中获取术语计数

java - 使用 Lucene 对小文档进行高效的位置查询

sitecore - 通过 Lucene.Net 获取最近的文章

grails 可搜索插件查询

java - Spring 启动: Unit Test with Cassandra

java - CF 中的十六进制对象

java - 等效于 Jersey/JAX-RS/REST 资源的 Servlet 过滤器?

java - 在 Windows 中使用 Java 保护文件