【发布时间】:2018-01-31 00:02:24
【问题描述】:
在 Lucene 6.6.0 及更高版本中,字段级索引时间提升为 deprecated。文档指出:
不推荐使用索引时间提升,请索引索引时间评分 因素到一个文档值字段中,并将它们与分数结合起来 使用例如查询时间。 FunctionScoreQuery。
以前会像这样在索引时提升字段:
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);
我不明白建议的 FunctionScoreQuery 如何成为字段级提升的合适替代品,因为一个人仅在给定现有 Query 的情况下构造一个 FunctionScoreQuery 和一个 DoubleValuesSource 代表仅可能多个字段之一的提升值:
// 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"))
有人可以解释一下 Lucene >= 6.6.0 中 Field#setBoost @ index time 的适当替换吗?我们是否应该在查询时枚举所有可能的字段并应用相关的提升?如果是这样,该查询是如何构造的?
【问题讨论】:
-
看起来这个简单的问题没有简单的答案。同时你有解决方案吗?
标签: lucene scoring lucene-boosting