3

我有一个字段item_name,在 Solr 5.0.0 中被索引。如何对包含某些特定单词的查询结果进行负面提升?

例如,假设我item_name喜欢:

Feggi Brown Laptop Bags
Dell Laptop (Black) without Laptop Bag by Dell
HP Laptop with Laptop Bag
Sony laptop without bag
Goldendays Laptop Bag

如果我搜索,laptop bags那么它会返回如下结果:

Dell Laptop (Black) without Laptop Bag by Dell
HP Laptop with Laptop Bag
Feggi Brown Laptop Bags
Sony laptop without bag
Goldendays Laptop Bag

如何对item_name包含以下单词的内容给予负面或低的提升:

有没有, ...

目标是item_name包含这些单词不会出现在结果的顶部?

stopwords注意:在这种情况下有什么关系吗?

4

2 回答 2

3

Solr的文档可以帮助您:

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

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

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

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

因此,在您的情况下,您必须执行以下操作:

q = item_name:laptop^100 item_name:bags^100 (*:* -item_name:with)^99 (*:* -item_name:without)^99

如果您使用的是 (e)dismax,Solr 的文档会告诉您:

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

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

在您的情况下,似乎与stopwords.

于 2015-06-10T10:02:51.703 回答
2

在 DisMax 中,您可以使用以下代码降低字段 'item_name' 中包含单词 'with' 或 'without' 的文档的相关性分数:

   - ['bf', "if(or(tf(item_name,'with'),tf(item_name,'without')),-5,0)"]

只要我知道,此语法在 Dismax 以及 Solr 和 EDisMax 解析器中都有效。以上代码为yaml格式,用于VuFind中的相关性设置。

是的,与停用词有一些关系。例如,在停用词列表中使用单词“with”,当您搜索沙拉配番茄时,结果集将与沙拉番茄相同。文档中单词“with”的存在不会影响结果集的顺序。

于 2016-01-07T12:29:13.430 回答