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

Posted

技术标签:

【中文标题】如何编写一个 solr 查询来检索数字字段值小于指定值的所有记录?【英文标题】:How to write a solr query for retrieving all records with numeric field value less then specified? 【发布时间】:2012-01-30 12:30:30 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

我认为查询解析器不支持< 运算符。您必须明确定义 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-standard-query-parser

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

【讨论】:

【参考方案2】:

据我所知,我不相信 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

【讨论】:

【参考方案3】:

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

&q=name:ipod&fq=price:[* TO 100]

【讨论】:

以上是关于如何编写一个 solr 查询来检索数字字段值小于指定值的所有记录?的主要内容,如果未能解决你的问题,请参考以下文章

检索Solr查询中的特定字段?

检索 Solr 查询中的特定字段?

CSV 中返回的 Solr 多值字段

Solr在医疗大数据检索中的应用

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题

solr 通过配置多值字段动态字段来解决文本表达式查询精确到句子的问题20171214