【问题标题】:Apache Lucene boost document sectionApache Lucene boost 文档部分
【发布时间】:2018-05-13 18:13:26
【问题描述】:

我正在使用 Apache Lucene 7.2.1 开发一个项目,我想更改文档的评分系统,以使文档的第一部分(前 5 个单词)的相关性比文档的其余部分高两倍。

举个例子:

doc1 = "一二三四五六"

doc2 = "六一二三四五"

查询 = “六”

doc2 的分数必须是 doc1 的两倍。

你能帮我实现这个吗?我知道在旧版本的 Lucene 中,Field 上有一个 setBoost 方法,但在这个版本中,没有。是否应该在索引文档时设置提升,还是在进行查询时设置?

谢谢!

【问题讨论】:

    标签: java apache lucene


    【解决方案1】:

    应该在搜索时进行提升。您可以使用 BoostQuery 来实现这一点。

    BoostQuery 是 Query 类,因此您可以将其与其他查询类型结合使用。一个抽象的例子:

    BooleanQuery booleanQuery = new BooleanQuery();
    booleanQuery.add(new BoostQuery(query1, 2f), BooleanClause.Occur.MUST);
    booleanQuery.add(new BoostQuery(query2, 1f), BooleanClause.Occur.MUST);
    

    在此处查看有关一般评分和提升的更多详细信息: https://lucene.apache.org/core/7_0_0/core/org/apache/lucene/search/package-summary.html#package.description

    【讨论】:

    • 嗯,BoostQuery 的好主意。我可以创建一个提升值为 3 的查询,只考虑每个文档的前 10 个单词,另一个提升值为 1 的查询,考虑文档的其余部分。最后,将每个文档的 2 个分数相加得到最终分数……是这样吗?或者有没有Lucene提供的结合不同查询分数的类/方法?
    • BoostQuery 基于 Query,因此您可以根据文档结构组合多个查询。我将以一个抽象的例子来回答。在此基础上,您将直接收到分数,无需添加分数。
    • 我按照建议做了(用应该而不是必须),这几乎是正确的。现在不好的是,在我的示例中,doc2 的分数并不是 doc1 分数的 2 倍。我认为这与文档每个部分的长度有关。
    • 你能提供你的文档是什么样子的吗?你的加分是多少? 2f 和 1f?
    • 文档如我在问题中描述的那样: doc1 = "一二三四五六" doc2 = "六一二三四五" 是的,第一个查询(前 5 个字)被提升2.
    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多