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

Lucene:如何提升某些特定领域,lucene,search-engine,Lucene,Search Engine,在我的例子中,文档有两个字段,例如,“标题”和“视图”。“视图”表示用户访问此文档的次数。比如:“标题”:“iphone”,“视图”:“10”。 我必须制定一个策略,为视图分配一些权重,例如相关性分数是通过分数(标题)*0.8+分数(视图)*0.2计算的。lucene能做到吗?我想知道是否有一些算法与这个问题相关 您可以通过三种方式提升。根据您的需要,您可能希望使用组合 通过调用 将文档添加到索引之前的document.setBoost() 通过调用 将字段添加到文档之前(以及 将文档添加到索引

在我的例子中,文档有两个字段,例如,“标题”和“视图”。“视图”表示用户访问此文档的次数。比如:“标题”:“iphone”,“视图”:“10”。
我必须制定一个策略,为视图分配一些权重,例如相关性分数是通过分数(标题)*0.8+分数(视图)*0.2计算的。lucene能做到吗?我想知道是否有一些算法与这个问题相关

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

通过调用 将文档添加到索引之前的document.setBoost()

通过调用 将字段添加到文档之前(以及 将文档添加到索引中)

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


来源:

以下是您可以做到这一点的方法:

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*分数(titleQuery)+0.2*分数(viewsQuery)
(乘以常数)成比例


要利用您的
视图
字段,如果您在2020年后在Lucene 8.5.2中到达这里,您可能需要使用一个。

  • Document.setBoost()已不存在
  • Field.setBoost()已不存在
  • Query.setBoost()已不存在
  • 前进的道路:

  • 将您的查询(任何查询,但在本例中可能是TermQuery)包装在一个BoostQuery中

    Query boosted = new BoostQuery(query, 2f);
    
  • 在查询解析器语法中使用插入符号^

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

  • 如果我理解正确的话,setBoost已经被弃用了,现在应该使用document.setBoost()很久以前就被弃用了。