11

我有一个项目清单:

i = SearchQuerySet().models(Item)

现在,每个项目i都有一个属性,price

我想缩小价格信息不可用的结果以及落在给定范围内的价格信息

就像是

i.narrow('price:( None OR [300 TO 400 ] )')

那怎么办?

4

5 回答 5

12

尝试这个:

-(-price:[300 TO 400] AND price:[* TO *])

在逻辑上是相同的,它在 Solr 中工作。

于 2013-06-20T10:50:46.693 回答
6

根据SolrQuerySyntax

纯否定查询:

-field:[* TO *]查找所有没有字段值的文档

你可以试试:

q=(*:* -price:[* TO *]) OR price:[300 TO 400]

于 2013-06-11T13:17:55.677 回答
0

Maurizio 建议的双重否定查询可能会导致错误:

unexpected docvalues type NUMERIC for field 'price' (expected one of [SORTED, SORTED_SET]). Re-index with correct docvalues type.

(即使在重新索引之后。这可能与字段的indexandstoredocvalues设置有关。)

您可以做的是免除您实际感兴趣的值的两个范围(之前和之后):

-(price:[* TO 300} price:{400 TO *])

请注意,在此否定查询中使用大括号排除了值 300 和 400,因此包含在搜索结果中。

于 2017-10-30T06:49:48.620 回答
0

目的是根据类型的提升以及如果 type:bike 项目具有图像,则按分数对某些项目进行排序。结果应该是:

  1. 汽车
  2. 带有图像的自行车
  3. 没有图像的自行车

这是我的第一个查询方法:( type:"car"^10000 OR type:"boat"^5000 OR (type:"bike" AND image-type:[* TO *])^100 OR type:"bike"^5工作正常)

但是我忘记了没有类型字段的旧数据项。应该在这样的结果集中:

  1. 汽车
  2. 带有图像的自行车
  3. 没有图像的自行车
  4. 所有没有类型的项目

所以我将查询更改为-type:[* TO *] OR type:"car"^10000 OR type:"boat"^5000 OR (type:"bike" AND image-type:[* TO *])^100 OR type:"bike"^5并没有结果。

所以我找到了这个线程并尝试将我的查询更改为-(type:[* TO *] OR -type:"car"^10000 OR -type:"boat"^5000 OR -(type:"bike" AND image-type:[* TO *])^100 OR -type:"bike"^5),如这个答案所示https://stackoverflow.com/a/17211744/326905

但可悲的是,所有项目都有相同的分数:(

于 2016-11-08T14:22:22.073 回答
-1

filter query如果您不关心文档分数并且想要利用过滤器缓存,可以使用 a ,例如:

?q=*:*&fq=((-price:[* TO *]) or (price:[300 TO 400]))
于 2013-06-19T07:57:52.120 回答