【问题标题】:possible to ignore lucene document boost?可以忽略 lucene 文档提升吗?
【发布时间】:2011-09-23 09:14:10
【问题描述】:

我正在寻找一种方法来告诉 lucene 搜索器忽略某些查询的文档提升?

在我们的搜索结果中,我们通常在索引时使用根据文档年龄计算的主要提升因子(索引每晚重建)。

现在,我正在寻找一种方法来提供忽略年龄的搜索功能,但发现无法覆盖/忽略文档提升。

最好的问候,

亚历克斯

【问题讨论】:

    标签: java search lucene


    【解决方案1】:

    您是否正在寻找 QueryParser 可以理解的内容?因为那根本不可能。

    您在代码中的某处添加了 boost,默认情况下 Lucene 不会这样做。您必须删除这段额外的代码,或将其设为可选以忽略提升。

    【讨论】:

    • 也许我的问题不够清楚:对于大多数查询,我仍然需要当前的提升,但想构建一个额外的替代查询,其中省略了常规文档提升。
    【解决方案2】:

    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 类计算。

    当一个文档被加入索引时,以上所有的因素都是 相乘。 如果文档有多个同名字段, 他们所有的提升都相乘:

    (...)

    最后,注意搜索时间来不及修改这个规范部分 评分,例如通过使用不同的相似度进行搜索。

    【讨论】:

      【解决方案3】:

      您可以将计算的分数存储在一个新字段中,而不是将其存储为 boost,并通过实现 CustomScoreQuery + CustomScoreProvider 您可以控制返回哪个值(默认分数或您在字段中计算的分数)

      【讨论】:

      • 这看起来是正确的方法......但我想我必须更深入地了解这些的用法。通过遵循一些 API-Docs,我发现了一些名为“FieldScoreQuery”的东西!感谢您指出正确的方向。
      猜你喜欢
      • 2011-02-15
      • 2011-06-11
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2019-05-15
      相关资源
      最近更新 更多