loo*_*ver 7 lucene scoring lucene-boosting
在 Lucene 6.6.0 及更高版本中,不推荐使用字段级索引时间提升。该文件指出:
不推荐使用索引时间提升,请将索引时间评分因素索引到文档值字段中,并在查询时使用例如将它们与分数组合。函数分数查询。
以前会在索引时提升一个字段,如下所示:
Field title = new Field(PaperDAO.LUCENE_FIELD_TITLE, titleStr, fieldType);
title.setBoost(3.00f);
document.add(title);
Field authors = new Field(PaperDAO.LUCENE_FIELD_AUTHOR, StringEscapeUtils.unescapeHtml4(this.getAuthorsForLucene()), fieldType);
authors.setBoost(10.00f);
document.add(authors);
Run Code Online (Sandbox Code Playgroud)
我不明白建议的 FunctionScoreQuery 如何是字段级别提升的合适替代品,因为只有一个现有的 Query 和一个 DoubleValuesSource 表示可能许多字段中的一个的提升值,因此构造了一个 FunctionScoreQuery :
// INDEX TIME
Field title = new Field(PaperDAO.LUCENE_FIELD_TITLE, titleStr, fieldType);
document.add(title);
document.add(new FloatDocValuesField(PaperDAO.LUCENE_FIELD_TITLE + "_boost", 3.00f));
// QUERY TIME
new FunctionScoreQuery(query, DoubleValuesSource.fromFloatField(PaperDAO.LUCENE_FIELD_TITLE + "_boost"))
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下 Lucene >= 6.6.0 中 Field#setBoost @ index time 的适当替换吗?我们是否应该在查询时枚举所有可能的字段并应用相关的提升?如果是这样,该查询是如何构造的?
首先,您仍然有一些时间使用旧式索引时间提升,因为它们只会在Lucene 7.0中被删除:)
转到这个主题,社区很久以前就决定,索引时间提升是一项复杂且难以获得正确技术的技术。
我认为当前的想法 - 不是用每个字段 docvalues 字段替换每个字段的索引时间提升,而是用 docvalues 字段中的 1 个累积分数替换文档的所有索引时间提升,然后在搜索过程中使用它。
请将索引时间评分因素索引到文档值字段中 ,并将它们与查询时的分数相结合
引用来自javadoc,它只会增强我的这个想法。您可以将多个因素索引到一个字段中。
对我来说,悬而未决的问题是 - 如何将几个因素组合成 1。我希望这是可以测试和验证的东西(使用乘法、求和或某种线性组合)
| 归档时间: |
|
| 查看次数: |
1404 次 |
| 最近记录: |