【发布时间】:2011-09-23 09:14:10
【问题描述】:
我正在寻找一种方法来告诉 lucene 搜索器忽略某些查询的文档提升?
在我们的搜索结果中,我们通常在索引时使用根据文档年龄计算的主要提升因子(索引每晚重建)。
现在,我正在寻找一种方法来提供忽略年龄的搜索功能,但发现无法覆盖/忽略文档提升。
最好的问候,
亚历克斯
【问题讨论】:
我正在寻找一种方法来告诉 lucene 搜索器忽略某些查询的文档提升?
在我们的搜索结果中,我们通常在索引时使用根据文档年龄计算的主要提升因子(索引每晚重建)。
现在,我正在寻找一种方法来提供忽略年龄的搜索功能,但发现无法覆盖/忽略文档提升。
最好的问候,
亚历克斯
【问题讨论】:
您是否正在寻找 QueryParser 可以理解的内容?因为那根本不可能。
您在代码中的某处添加了 boost,默认情况下 Lucene 不会这样做。您必须删除这段额外的代码,或将其设为可选以忽略提升。
【讨论】:
http://lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/search/Similarity.html
从第 6 点开始,我认为不可能在搜索时忽略提升:
norm(t,d) 封装了一些(索引时间)提升和长度因子:
- 文档提升 - 通过在添加之前调用 doc.setBoost() 设置 文档到索引。
- 字段提升 - 通过在添加字段之前调用 field.setBoost() 设置 字段到文档。
- lengthNorm(field) - 当文档添加到 根据该字段在 文档,因此较短的字段对分数的贡献更大。 LengthNorm 由在索引时生效的 Similarity 类计算。
当一个文档被加入索引时,以上所有的因素都是 相乘。 如果文档有多个同名字段, 他们所有的提升都相乘:
(...)
最后,注意搜索时间来不及修改这个规范部分 评分,例如通过使用不同的相似度进行搜索。
【讨论】:
您可以将计算的分数存储在一个新字段中,而不是将其存储为 boost,并通过实现 CustomScoreQuery + CustomScoreProvider 您可以控制返回哪个值(默认分数或您在字段中计算的分数)
【讨论】: