Elasticsearch

时间:2016-06-06 16:27:24

标签: elasticsearch lucene range

我正在尝试使用以下范围查询来查询Elasticsearch集群(2.3)中的数据。为了澄清,我正在搜索包含一组值的字段,这些值是通过将两个ID与一个计数连接而得到的。例如:

架构:

{
  id1: 111,
  id2: 222,
  count: 5
}

我正在使用的查询如下所示:

查询:

{
  "query": {
  "bool": {
    "must": {
      "range": {
        "myfield": {
          "from": "111_222_1",
          "to": "111_222_2147483647",
          "include_lower": true,
          "include_upper": true
          }
        }
      }
    }
  }
}

to字段使用Integer.MAX_VALUE

这项工作正常,但与基础数据不完全匹配。通过其他方式查询产生的结果比这种方法更多。

更奇怪的是,在111_222_5字段中尝试from会产生0个结果,而尝试111_222_10 会产生结果。

ES(和/或Lucene)如何解释此范围查询以及为什么会产生如此奇怪的结果?我最初的猜测是,它没有查看字符串最后一部分的完整值,可能只查看第一个数字。

有没有办法为TermRange指定格式?我知道日期范围允许格式化。

1 个答案:

答案 0 :(得分:0)

A look here provides the answer.

它的做法范围是词典,5在50之前到达,等等。

为了解决这个问题,我使用固定长度的字符串重新编制索引。

0000000001
0000000100
0001000101
...