假设我们有一组带有名称和价格的 mp3 播放器。
如何编写正确的 solr 查询以查找具有特定名称且价格低于 100 美元的所有商品?
q = "(name:(ipod) AND price ???? 100.0)"
我认为查询解析器不支持<
运算符。您必须明确定义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 的所有字段值
另请注意,在性能方面,您应该为此使用过滤器查询:
&q=name:ipod&fq=price:[* TO 100]
据我所知,我不相信 Solr/Lucene 支持大于/小于。它可以以编程方式完成,例如整数和日期(在你的情况下,货币价值,因为只有两位小数需要担心)。
例如,Lucene 和 Solr 查询解析器原生支持小于或等于 (<=):
?q=name:ipod AND price:[* to 99.99]
这将为您提供您正在寻找的不到 100 美元,前提是数据不涉及一分钱。
对于日期和整数之类的事物,或其他具有显着有限差异的事物,您可以减少(或在大于的情况下增加)您想要的值。
编辑:查看 Solr 6.5 版的文档。它确实包含独家范围支持。参考指南的第 272 页解释了。
本质上,使用花括号来表示小于。
?q=name:ipod AND price:{* TO 100}