Lucene:如何提升某些特定领域

rem*_*emy 10 lucene search-engine

在我的例子中,文档有两个字段,例如"title"和"views"."views"表示人们访问此文档的次数.喜欢:"标题":"iphone","views":"10".我必须制定一个策略,为视图分配一些权重,例如相关性得分由得分(标题)*0.8 +得分(观点)*0.2计算.lucene可以做到这一点吗?我想知道是否有一些与此问题相关的算法.

jpo*_*ntz 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
Run Code Online (Sandbox Code Playgroud)

得分将与0.8*score(titleQuery) + 0.2*score(viewsQuery)(乘以常数)成比例.

要利用您的views字段,您可能需要使用ValueSourceQuery.


cqu*_*zel 10

如果您在 2020 年之后到达这里,请使用 Lucene 8.5.2。

  1. Document.setBoost() 不再存在。
  2. Field.setBoost() 不再存在。
  3. Query.setBoost() 不再存在。

出行方式:

  1. 在 à BoostQuery 中包装您的查询(任何查询,但在这种情况下可能是 TermQuery)

    Query boosted = new BoostQuery(query, 2f);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在查询解析器语法中使用插入符号 ^ 符号。

  3. 在 MultiFiledQueryParser 中指定提升。
  4. 使用 PerFieldSimilarityWrapper 并调整每个字段的分数。


Mik*_*kos 8

你可以通过3种方式提升.根据您的需要,您可能希望使用组合

文档级别提升 - 在索引时 - 通过在将文档添加到索引之前调用document.setBoost().

文档的字段级别提升 - 在索引时 - 通过在向文档添加字段之前(以及在将文档添加到索引之前)调用field.setBoost().

查询级别提升 - 在搜索期间,通过在查询子句上设置提升,调用Query.setBoost().

来源:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html

  • document.setBoost() 很久以前就被弃用了。 (3认同)