4

我的索引中有一个“费用”字段。我想提升收费值不等于 0 的结果。我尝试为此使用 bq 参数,但没有成功。

&bq=charges:"0"^-1

我尝试使用上述方法,但收到 400 错误报告。

4

3 回答 3

7

除了@harmstyler 的答案之外
,您还可以积极地提升非零值(如果费用是整数字段),例如

bq=charges:[1 TO *]^10
于 2012-12-11T04:33:52.680 回答
7

这是旧帖子,但没有完全更新,目前支持负提升。

下面来自 关于负提升的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.0tf-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

于 2018-09-14T08:41:17.787 回答
5

Solr 不支持负提升。但是,话虽如此,您可以用非常低的数字来提升您的内容,使其具有负面提升的效果。记住^1被认为是默认的提升。所以,&bq=charges:"0"^1是一样的&bq=charges:"0"。如果你想创造一个“负提升”试试&bq=charges:"0"^0.8。有关完整文档,请查看本文

于 2012-12-10T20:46:15.143 回答