我正在使用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...
结果得分高于没有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"`
如果要允许倾斜(即查询和'by'或'with'之间的多余单词)并保留上述术语的顺序,则应查看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`