Boost Solr结果基于包含命中的字段

时间:2010-03-11 14:11:39

标签: solr lucene scoring solr-boost

我正在浏览网页,寻找索引和搜索框架,并偶然发现Solr。 我们绝对需要的功能是根据命中包含的字段来提升结果。

一个小例子:

考虑这样的记录:

<movie>
  <title>The Dark Knight</title>
  <alternative_title>Batman Begins 2</alternative_title>
  <year>2008</year>
  <director>Christopher Nolan</director>
  <plot>Batman, Gordon and Harvey Dent are forced to deal with the chaos unleashed by an anarchist mastermind known only as the Joker, as it drives each of them to their limits.</plot>
</movie>

我希望将titlealternative_titleplot字段组合到一个搜索字段中,在查看Solr / Lucene文档和教程后,这并不太难。
不过,我还希望title中受欢迎的电影得分高于alternative_title上的点击次数,而得奖者的得分应高于plot字段中的点击次数。
有没有办法在XML中表明这种评分,还是我们需要开发一些自定义评分算法?

请注意,我给出的示例是虚构的,真实数据可能包含100多个字段。

3 个答案:

答案 0 :(得分:11)

这就是Solr的DismaxQueryParser的设计目标。见http://wiki.apache.org/solr/DisMaxRequestHandler

有很多参数,但您需要自定义的主要参数是“qf”,这是您指定应搜索哪些字段以及每个字段的提升的方式。因此,如果您希望标题占主导地位,您可以指定类似的内容:

title ^ 10 alternative_title ^ 2 director ^ 1 plot ^ 1

作为qf参数的值。您可以通过自定义示例配置和实验来进行设置。

答案 1 :(得分:6)

我没有使用Solr,但我使用过Lucene。在看:

http://wiki.apache.org/solr/SolrQuerySyntax

它声明Solr的查询语法是Lucene的超集。在Lucene中,你可以执行每场增强的方法是使用胡萝卜算子,后跟一些任意值,即

title:batman^10 alternative_title:batman

在查询时执行此操作的优点是,您可以动态调整提升值,以匹配您拥有的任何相关标准。因此,如果10的提升值太高,您可以相应调整它。

答案 2 :(得分:1)

如果此功能不是特定于一个搜索而是整个站点。您可以在索引时提升标题。 Boosting为该领域提供了更高的相关性分数,这听起来正是您想要的。

点击此链接:

http://wiki.apache.org/solr/UpdateXmlMessages#Optional_attributes_for_.22field.22