【问题标题】:Lucene query language and numeric rangeLucene 查询语言和数值范围
【发布时间】:2018-05-28 21:42:27
【问题描述】:

我正在应用以下 Lucene 查询谓词以获取 2 到 6 范围内的所有包含数字:

value:[2 TO 6]

并接收具有以下值的文档:

567986400000
567986400000
567986400000
536450400000
536450400000
599608800000
536450400000
567986400000

我对数字范围查询很感兴趣,例如,Long567986400000 显然不在 [2 TO 6] 的范围内。看起来范围搜索是字符串,我不知道如何在我的应用程序中针对不同的数值解决它。

如何在 Lucene 中正确使用数值范围查询?

【问题讨论】:

  • 如何索引您的文档,尤其是您使用范围查询的字段是什么类型的字段?
  • 老实说,我不控制这个过程,因为我在 Neo4j 数据库中基于 Lucene 构建的手动索引上使用范围查询。我有这些开箱即用的索引,我只能提供要在索引中搜索的谓词。
  • 这很重要,因为您需要使用特定字段进行范围查询。将添加一个答案

标签: lucene range-query


【解决方案1】:

要实现正确的范围查询,您需要使用来自 lucene 的特定定义字段。见Field javadoc

  • IntPoint:int 索引用于精确/范围查询。
  • Lo​​ngPoint:长索引用于精确/范围查询。
  • FloatPoint:浮点索引用于精确/范围查询。
  • DoublePoint:精确/范围查询的双索引。

因此,您需要确保您添加此查询的字段是其中一种类型。正如你所说,你使用 Neo4j 生成的 lucene 索引。必须有创建此类字段的选项,否则您将无法执行正确的范围查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多