15

我在浏览网页寻找索引和搜索框架时偶然发现了 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>

例如,我想将title,alternative_titleplot字段组合成一个搜索字段,这在查看 Solr/Lucene 文档和教程后并不难。
但是,我也希望获得成功的电影title的得分高于热门电影,而那些电影的得分alternative_title应该高于该plot领域的热门电影。
有什么方法可以在 XML 中表示这种评分,还是我们需要开发一些自定义评分算法?

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

4

3 回答 3

11

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

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

标题^10 Alternative_title^2 导演^1 情节^1

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

于 2010-03-15T19:20:54.747 回答
6

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

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

它指出 Solr 的查询语法是 Lucene 的超集。在 Lucene 中,您可以执行每个字段提升的方式是使用胡萝卜运算符,后跟一些任意值,即

title:batman^10 alternative_title:batman

在查询时这样做的好处是您可以即时调整提升值以匹配您拥有的任何相关标准。因此,如果提升值 10 太高,您可以相应地调整它。

于 2010-03-12T14:50:56.677 回答
1

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

看看这个链接:

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

于 2010-03-11T19:27:43.727 回答