我有一个字段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
有什么关系吗?。
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"指定的查询如何直接添加到main查询你需要明确。。。
? defType = dismax & q = foo bar & bq = (*:* -xxx)^999
在您的情况下,似乎与stopwords
没有任何联系。
在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"不会影响结果集的顺序。