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

如果我搜索类似单词的laptop table,是否有任何方法可以在诸如withwithout等单词之前增强搜索结果的单词。

我用这个查询:

? defType = dismax
    & q = foo bar
    & bq = (*:* -by)^999


但是,这会对带有bywith等单词的文档产生负面影响。我如何避免此问题?

例如,如果我搜索laptop table,则通过上述查询,结果DGB Cooling Laptop Table by GDB不会提高。

我只需要在某些词(例如bywith等)之前增强搜索词。
可能吗?

最佳答案

在您的示例中,您希望...laptop table by...结果得分高于没有laptop tableby结果。您希望完全省略...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`

08-07 21:39