2

我正在研究在查询期间降低一组文档的可能性。在我的应用程序中,当我搜索例如“首选项”时,我想取消使用 ContentGroup:“Developer” 标记的内容,或者换句话说,将这些内容按顺序推回。这就是问题所在。我在查询字段上有以下权重并在源上提升查询

qf=text^6 title^15 IndexTerm^8

如您所见,title具有更高的权重。

现在,一堆用ContentGroup:"Developer"标记的内容由诸如"Preferences.material""Preferences Property""Preferences.graphics"之类的标题组成。标题的提升将这些文件推到了顶部。

我正在寻找的是看看是否有一种方法可以取消所有标记为 ContentGroup:"Developer" 的文档,而不管术语出现是文本还是标题。我尝试了类似的东西,但没有任何区别。

Source:simplecontent^10 Source:Help^20 (-ContentGroup-local:("Developer"))^99

我正在使用 edismax 查询解析器。

任何指针将不胜感激。

谢谢,

沙米克

4

1 回答 1

4

您在最后一次尝试中有所收获,但您必须从 开始*:*,以便您实际上可以从中减去文档。然后可以提升生成的文档集(与您的查询不匹配的文档)。

来自Solr 相关性常见问题解答

如何对匹配查询的文档给予负面(或非常低)的提升?

不支持真正的负提升,但您可以在查询子句上使用非常“低”的数字提升值。总的来说,让人困惑的问题是,“低”的提升仍然是提升,它只能提高匹配的文档的分数。例如,如果您想查找与“foo”或“bar”匹配的所有文档,但要惩罚匹配“xxx”的文档的分数,您可能会想尝试...

q = foo^100 bar^100 xxx^0.00001 # NOT WHAT YOU WANT

...但这仍然有助于匹配所有三个子句的文档得分高于仅匹配前两个子句的文档。伪造“负提升”的一种方法是对不匹配的所有内容进行大幅提升。例如...

q = foo^100 bar^100 (*:* -xxx)^999

注意:当使用 (e)dismax 时,人们有时期望在“bq”参数中指定一个具有较大提升的纯负查询将起作用(因为 Solr 通过添加隐式“ : ”自动生成顶级纯负正查询——但这不适用于“bq”,因为通过“bq”指定的查询如何直接添加到主查询中。你需要明确......

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

于 2016-02-24T22:40:26.703 回答