我使用的是Solr 5.0.0,我在相关性增强中有一个问题:
如果我搜索类似laptop table
的单词,有没有任何方法可以将搜索结果提升到类似with
或without
等单词之前。
我使用了这个查询:
? defType = dismax
& q = foo bar
& bq = (*:* -by)^999
但是,这会对那些有单词by
或with
等的文档产生负面影响。我该如何避免这个问题?
例如,如果我搜索laptop table
,那么通过上面的查询,结果DGB Cooling Laptop Table by GDB
不会提升。
我只需要在某些单词(如by
、with
等(之前增加搜索单词。有可能吗?
在您的示例中,您希望...laptop table by...
结果的得分高于没有by
的laptop table
结果。并且您希望完全省略...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(即查询和'by'或'with'之间的额外单词(并保留如上所述的术语顺序,你应该查看ComplexPhraseQueryParser(Solr 4.8+(Yonik Seeley对此有一篇很好的文章。
然后你可以做这样的事情:
`q=({!complexphrase inOrder=true}"laptop table by"~2^2 OR "laptop table") NOT {!complexphrase inOrder=true}"by laptop table"~2`