Solr Relevance Search提升

时间:2015-07-03 06:06:45

标签: solr lucene relevance solr-boost

我正在使用Solr 5.0.0,我在相关性提升中有一个问题:

如果我搜索<script type="text/javascript" src="//code.jquery.com/jquery-1.8.3.js"></script> <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/select2/3.2/select2.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/select2/3.2/select2.css"/> <input id="e1" style="width:300px" />个单词,是否有任何方法可以在laptop tablewith之类的字词之前提升结果搜索字词。

我使用了这个查询:

without

但是,这会对那些包含? defType = dismax & q = foo bar & bq = (*:* -by)^999 by等字词的文件产生负面影响。我怎样才能避免这个问题?

例如,如果我搜索with,则通过上述查询,结果laptop table无法提升。

我只需要在某些字词DGB Cooling Laptop Table by GDBby等之前对搜索字词进行提升。 有可能吗?

1 个答案:

答案 0 :(得分:0)

在您的示例中,您希望...laptop table by...结果得分高于laptop table结果而不by。并且您希望完全省略...by laptop table...

我们打电话给他们:

  • Q1:...laptop table by...(让练习提高2点)
  • Q2:...laptop table...(完全没有提升)
  • Q3:...by laptop table...(我们想省略这个)

因此,您在摘要中的查询是:(Q1^2 OR Q2) NOT Q3

dismax解析器可能通过代表您做太多来掩盖您的目标。至少对于这篇文章,你应该考虑使用标准(Lucene)查询解析器:

`q=("laptop table by"^2 OR "laptop table") NOT "by laptop table"`

如果你想允许slop(即查询和&#39;或者&#39;或&#39;和&#39;之间的额外词汇)并保留术语的顺序为上面,你应该看一下ComplexPhraseQueryParser(Solr 4.8+)Yonik Seeley has a nice post about this.

然后你可以这样做:

`q=({!complexphrase inOrder=true}"laptop table by"~2^2 OR "laptop table") NOT {!complexphrase inOrder=true}"by laptop table"~2`