我有一个项目清单:
i = SearchQuerySet().models(Item)
现在,每个项目i
都有一个属性,price
我想缩小价格信息不可用的结果以及落在给定范围内的价格信息
就像是
i.narrow('price:( None OR [300 TO 400 ] )')
那怎么办?
我有一个项目清单:
i = SearchQuerySet().models(Item)
现在,每个项目i
都有一个属性,price
我想缩小价格信息不可用的结果以及落在给定范围内的价格信息
就像是
i.narrow('price:( None OR [300 TO 400 ] )')
那怎么办?
尝试这个:
-(-price:[300 TO 400] AND price:[* TO *])
在逻辑上是相同的,它在 Solr 中工作。
纯否定查询:
-field:[* TO *]
查找所有没有字段值的文档
你可以试试:
q=(*:* -price:[* TO *]) OR price:[300 TO 400]
Maurizio 建议的双重否定查询可能会导致错误:
unexpected docvalues type NUMERIC for field 'price' (expected one of [SORTED, SORTED_SET]). Re-index with correct docvalues type.
(即使在重新索引之后。这可能与字段的index
andstore
和docvalues
设置有关。)
您可以做的是免除您实际感兴趣的值的两个范围(之前和之后):
-(price:[* TO 300} price:{400 TO *])
请注意,在此否定查询中使用大括号排除了值 300 和 400,因此包含在搜索结果中。
目的是根据类型的提升以及如果 type:bike 项目具有图像,则按分数对某些项目进行排序。结果应该是:
这是我的第一个查询方法:(
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
并没有结果。
所以我找到了这个线程并尝试将我的查询更改为-(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
但可悲的是,所有项目都有相同的分数:(
filter query
如果您不关心文档分数并且想要利用过滤器缓存,可以使用 a ,例如:
?q=*:*&fq=((-price:[* TO *]) or (price:[300 TO 400]))