20

假设我们有一组带有名称和价格的 mp3 播放器。

如何编写正确的 solr 查询以查找具有特定名称且价格低于 100 美元的所有商品?

q = "(name:(ipod) AND price ???? 100.0)"

4

3 回答 3

24

我认为查询解析器不支持<运算符。您必须明确定义RangeQuery。然后,您可以使用BooleanQuery将名称查询附加到该名称查询。

更新:显然,我错了。事实上,Solr 的查询解析器比 Lucene 的更智能。这是你的答案:https ://lucene.apache.org/solr/guide/8_0/the-standard-query-parser.html#differences-between-lucene-s-classic-query-parser-and-solr-s -标准查询解析器

field:[* TO 100] 查找小于或等于 100 的所有字段值

于 2011-12-30T11:35:24.380 回答
14

另请注意,在性能方面,您应该为此使用过滤器查询:

&q=name:ipod&fq=price:[* TO 100]
于 2012-01-01T22:05:59.867 回答
8

据我所知,我不相信 Solr/Lucene 支持大于/小于。它可以以编程方式完成,例如整数和日期(在你的情况下,货币价值,因为只有两位小数需要担心)。

例如,Lucene 和 Solr 查询解析器原生支持小于或等于 (<=):

?q=name:ipod AND price:[* to 99.99]

这将为您提供您正在寻找的不到 100 美元,前提是数据不涉及一分钱。

对于日期和整数之类的事物,或其他具有显着有限差异的事物,您可以减少(或在大于的情况下增加)您想要的值。

编辑:查看 Solr 6.5 版的文档。它确实包含独家范围支持。参考指南的第 272 页解释了。

http://mirror.cc.columbia.edu/pub/software/apache/lucene/solr/ref-guide/apache-solr-ref-guide-6.5.pdf

本质上,使用花括号来表示小于。

?q=name:ipod AND price:{* TO 100}
于 2017-04-27T13:27:19.770 回答