在我的例子中,文档有两个字段,例如“title”和“views”。 “views”表示人们访问此文档的次数。喜欢:“标题”:“iphone”,“views”:“10”。 我必须制定一个策略,为视图分配一些权重,例如相关性得分由得分(标题)* 0.8 +得分(观点)* 0.2计算。 lucene可以做到这一点吗?我想知道是否有一些与此问题相关的算法。
答案 0 :(得分:10)
以下是如何做到这一点:
Query titleQuery, viewsQuery;
titleQuery.setBoost(0.8);
viewsQuery.setBoost(0.2);
BooleanQuery query = new BooleanQuery();
query.add(titleQuery, Occur.MUST); // or Occur.SHOULD if this clause is optional
query.add(viewsQuery, Occur.SHOULD); // or Occur.MUST if this clause is required
// use query to search documents
分数将与0.8*score(titleQuery) + 0.2*score(viewsQuery)
成比例(乘以常数)。
要利用您的views
字段,您可能需要使用ValueSourceQuery。
答案 1 :(得分:6)
你可以通过3种方式进行提升。根据您的需要,您可能希望使用组合
文档级别提升 - 在索引时 - 通过调用 将文档添加到索引之前的document.setBoost()。
文档的字段级别提升 - 在索引时 - 通过调用 field.setBoost()在向文档添加字段之前(以及之前) 将文档添加到索引中)。
查询级别提升 - 期间 搜索,通过设置查询子句的提升,调用 Query.setBoost()。
来源:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html
答案 2 :(得分:4)
如果您是2020年以后到达这里的人,请使用Lucene 8.5.2。
前进的方式:
在àBoostQuery中包装您的查询(任何查询,但在这种情况下可能是TermQuery)
Query boosted = new BoostQuery(query, 2f);
在查询解析器语法中使用插入符号^。