Elasticsearch - 范围查询不起作用

时间:2017-11-02 13:44:53

标签: date elasticsearch search range

要尝试此错误,我尝试使用Elasticsearch 2.x和5.x,但不能使用其中任何一种。

我的Elasticsearch实例中保存了很多日志。他们有一个名为 timestamp 的字段,其格式为" YYYY-MM-dd HH-mm-ss.SSS" (例如," 2017-11-02 00:00:00.000")。当我尝试通过POSTMAN发送查询时:

{
  "query": {
    "range": {
        "timestamp": {
          "gte": "2017-10-21 00:00:00.000",
          "lte": "2017-10-27 00:00:00.000"
        }
      }
  }
}

我什么都没收到,而且我在这个范围内有超过500个日志。我做错了什么?

修改 : 我的索引(loganalyzer):

{
  "loganalyzer" : {
    "aliases" : { },
    "mappings" : {
      "logs" : {
        "properties" : {
          "entireLog" : {
            "type" : "string"
          },
          "formattedMessage" : {
            "type" : "string"
          },
          "id" : {
            "type" : "string"
          },
          "level" : {
            "type" : "string"
          },
          "loggerName" : {
            "type" : "string"
          },
          "testNo" : {
            "type" : "string"
          },
          "threadName" : {
            "type" : "string"
          },
          "timestamp" : {
            "type" : "string"
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "refresh_interval" : "1s",
        "number_of_shards" : "5",
        "creation_date" : "1507415366223",
        "store" : {
          "type" : "fs"
        },
        "number_of_replicas" : "1",
        "uuid" : "9w3QQQc0S0K0NcKtOERtTw",
        "version" : {
          "created" : "2040699"
        }
      }
    },
    "warmers" : { }
  }
}

我收到的是发送请求的内容:

{
    "took": 429,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

状态200(确定)。

1 个答案:

答案 0 :(得分:1)

使用映射进行编辑表明存在问题。你没有得到任何结果的原因是因为它试图找到一个"范围"对于字符串,您要提供索引中字段的值,这些值也被视为字符串。

      "timestamp" : {
        "type" : "string"
      }

Here's the elastic documentation on that mapping type

您需要在编制索引之前将日期映射应用于该字段,或者重新索引到在摄取之前应用该映射的新索引。

以下是映射请求的外观,符合您的时间戳格式:

PUT loganalyzer
{
  "mappings": {
    "logs": {
      "properties": {
        "timestamp": {
          "type":   "date",
          "format": "YYYY-MM-dd HH-mm-ss.SSS"
        }
      }
    }
  }
}