【发布时间】:2012-04-07 10:05:29
【问题描述】:
在我的例子中,文档有两个字段,例如“标题”和“视图”。 “views”表示人们访问此文档的次数。喜欢:“标题”:“iphone”,“视图”:“10”。 我必须制定一个策略,为视图分配一些权重,例如相关性分数是通过 score(title)*0.8+score(views)*0.2 计算的。 lucene可以做到这一点吗?我想知道是否有一些与这个问题相关的算法。
【问题讨论】:
标签: lucene search-engine
在我的例子中,文档有两个字段,例如“标题”和“视图”。 “views”表示人们访问此文档的次数。喜欢:“标题”:“iphone”,“视图”:“10”。 我必须制定一个策略,为视图分配一些权重,例如相关性分数是通过 score(title)*0.8+score(views)*0.2 计算的。 lucene可以做到这一点吗?我想知道是否有一些与这个问题相关的算法。
【问题讨论】:
标签: lucene search-engine
您可以通过 3 种方式提升。根据您的需要,您可能希望使用组合
文档级别提升 - 在索引时 - 通过调用 document.setBoost() 在将文档添加到索引之前。
文档的字段级别提升 - 在索引时 - 通过调用 field.setBoost() 在向文档添加字段之前(以及之前 将文档添加到索引中)。
查询级别提升 - 期间 搜索,通过在查询子句上设置提升,调用 Query.setBoost()。
来源:http://lucene.apache.org/core/old_versioned_docs/versions/3_0_0/scoring.html
【讨论】:
您可以这样做:
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。
【讨论】:
如果你在 2020 年之后到达这里,在 Lucene 8.5.2 中。
要走的路:
在 à BoostQuery 中包装您的查询(任何查询,在这种情况下可能是 TermQuery)
Query boosted = new BoostQuery(query, 2f);
在查询解析器语法中使用插入符号 ^。
【讨论】: