如何编写solr查询以检索数字字段值小于指定的所有记录?

Rom*_*man 13 java lucene syntax solr solrj

假设我们有一组名字和价格的mp3播放器.

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

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

Ese*_*gün 20

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

更新:显然,我错了.事实上,Solr的查询解析器比Lucene的更聪明.这是你的答案:http://wiki.apache.org/solr/SolrQuerySyntax#Differences_From_Lucene_Query_Parser

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


Bob*_*ait 9

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

&q=name:ipod&fq=price:[* TO 100]
Run Code Online (Sandbox Code Playgroud)


Cas*_*son 7

据我所知,我不相信Solr/Lucene支持更多/更少.它可以通过编程方式完成整数和日期之类的事情(在您的情况下,金钱值,因为只需要担心两个小数位).

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

?q=name:ipod AND price:[* to 99.99]
Run Code Online (Sandbox Code Playgroud)

如果数据不涉及分数,这将为您提供不到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}
Run Code Online (Sandbox Code Playgroud)