我的索引中有一个“费用”字段。我想提升收费值不等于 0 的结果。我尝试为此使用 bq 参数,但没有成功。
&bq=charges:"0"^-1
我尝试使用上述方法,但收到 400 错误报告。
除了@harmstyler 的答案之外
,您还可以积极地提升非零值(如果费用是整数字段),例如
bq=charges:[1 TO *]^10
这是旧帖子,但没有完全更新,目前支持负提升。
下面来自 关于负提升的Solr 文档:
长期以来,“查询”对象级别一直支持负查询提升(导致匹配文档的负分)。现在 QueryParsers 也已更新以处理此问题。
部分resulting in negative scores for matching documents
可能并不总是正确的,如下所述。
用法示例:考虑到您的收藏名称是product_collection
并且您想埋葬(负提升)具有特定品牌的产品:
http://localhost:8983/solr/product_collection/select?q=shoes&bq=brand:puma^-2&defType=dismax
此查询将被解析为:
"parsedquery_toString": "+((keyword:shoes)^1.0) () (brand:puma)^-2.0"
在这种情况下,-2
因子将乘以(brand:puma)
匹配的 tf-idf 分数,从而导致包含brand puma
.
但是,在 boost 查询中添加负因子并不意味着它总是会为文档产生负的最终分数。例如,如果文档keyword:shoes
匹配的 tf-idf 分数是和结果的3.0
tf-idf 分数,那么总体结果仍然是 1.5(正)。因此,相应地使用负提升因子。brand:puma
-1.5
我自己收藏的一个这样的例子:
"\n3.4329534 = 总和:\n 6.151505 = 重量(关键字:5786 中的鞋子) [SchemaSimilarity],结果:\n 6.151505 = 分数(doc=5786,freq=1.0 = termFreq=1.0\n),产品的:\n 4.2804184 = idf,计算为 log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) 来自:\n 199.0 = docFreq\n 14417.0 = docCount\n 1.437127 = tfNorm,计算为 (freq * (k1 + 1)) / (freq + k1 * (1 - b + b * fieldLength / avgFieldLength)) 来自:\n 1.0 = termFreq=1.0\n 1.2 = 参数 k1\n 0.75 = 参数 b\n 7.7978773 = avgFieldLength\n 2.0 = fieldLength\n -2.7185516 = weight(brand:puma in 5786)[SchemaSimilarity],结果:\n -2.7185516 = score(doc=5786,freq=1.0 = termFreq=1.0\n),乘积:\n -2.0 = boost\n 1.3592758 = idf,计算为 log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5)) 来自:\n 3704.0 = docFreq\n 14422.0 = docCount\n 1.0 = tfNorm,计算为 (freq * (k1 + 1)) / (freq + k1) 从:\n 1.0 = termFreq=1.0\n 1.2 = 参数 k1\n 0.0 = 参数 b(字段省略规范)\n",
关键词得分:shoes = 6.151505
品牌得分:puma = -2.7185516
导致总分正分为 3.4329534
Solr 不支持负提升。但是,话虽如此,您可以用非常低的数字来提升您的内容,使其具有负面提升的效果。记住^1
被认为是默认的提升。所以,&bq=charges:"0"^1
是一样的&bq=charges:"0"
。如果你想创造一个“负提升”试试&bq=charges:"0"^0.8
。有关完整文档,请查看本文。