2010-03-11 41 views
13

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

我想例如结合标题,alternative_title和情节字段到一个搜索栏,这之后是不是太困难查看Solr/Lucene文档和教程。 但是我也希望有一个标题命中的电影有比score_title命中更高的分数,而他们轮到他们的分数应该高于情节字段中的命中。 有没有什么方法可以在xml中表示这种评分,还是我们需要开发一些自定义评分算法?

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

由于提前,

汤姆

回答

6

我没有使用Solr的,但我已经使用Lucene的。在看:

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

它指出,Solr的查询语法Lucene的一个超集。而在Lucene的,您可以执行每场提升的方法是使用胡萝卜运营其次是一些任意值,即

title:batman^10 alternative_title:batman

在查询时这样做的好处是,你可以调整随时提升价值以符合您的任何相关标准。所以如果10的提升值太高,你可以相应地调整它。

11

这是Solr的DismaxQueryParser的设计目的。请参阅http://wiki.apache.org/solr/DisMaxRequestHandler

有很多参数,但您需要自定义的主要参数是“qf”,这是您如何指定应该搜索哪些字段以及如何对每个字段进行提升的方法。所以,如果你想标题占据主导地位,您可以指定是这样的:

标题^ 10 alternative_title^2 ^主任1个情节^ 1

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

相关问题