【问题标题】:Lucene String and Numeric range queriesLucene 字符串和数字范围查询
【发布时间】:2018-06-01 16:09:57
【问题描述】:

我只是好奇为什么 Lucene 不以标准方式区分字符串和数值。例如,['2' TO '6'][2 TO 6] 用于范围查询,默认情况下将它们全部视为字符串。

有什么特别的理由将这两种情况都视为字符串值吗?

【问题讨论】:

  • 什么是“标准”方式?
  • 字符串值的引号
  • 你总是可以实现你自己的查询解析器。但这也取决于你的字段是如何被索引的。如果您有文本/字符串字段;您将永远无法使用数字搜索。

标签: lucene range-query


【解决方案1】:

您的范围查询示例基于 lucene 查询语法。在这个定义中没有定义你执行这个查询的字段类型。

基本上,如果您将此查询应用于 TextField,则评估将基于字符串。如果将此应用于 IntPoint,则该数字将被解释为整数。对此负责的是 QueryParser,您可以在其中添加查询和要搜索的字段。

在您的情况下,使用 IntPoint 是有意义的,因为您想搜索数字范围。

有关查询解析器的更多详细信息,请参阅QueryParser Javadoc

【讨论】:

  • 我明白这一点。我不明白为什么不使用例如TermRangeQuery.NumericRangeFilter 以防范围查询中的非引用值(如[2 TO 6])和文本范围查询以防引用值如['2' TO '6']
  • 这是什么主意?如果您看到查询语法,您想立即查看它是字符串还是数字范围?
  • 是的,我希望 Lucene 查询解析器足够聪明,能够区分字符串文字(基于引号)和其他文字。为了移植我的 Neo4j 应用程序以使用 Lucene 索引而不是关系上的非索引属性,这对我来说是一个巨大的障碍。
  • afaik 这在 lucene 查询语法中是不可能的(老实说,没有这样的用例)。所以你尝试使用字符串文字但它不起作用?
  • 是的 :( 不幸的是,我遇到了以下问题 stackoverflow.com/questions/50545551/… 并没有看到任何解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多