ElasticSearch未返回预期结果

时间:2013-12-12 08:22:01

标签: json elasticsearch

我正在尝试使用以下查询运行ElasticSearch搜索。请原谅我的无知,因为我是ES的新手,而且我试图通过试错来尝试按照文档拼凑出来。基本上,唯一正在按预期工作的部分是from,size,sort和严重性匹配。提前谢谢您的帮助!

{
  "from":0,
  "size":50,
  "sort":{"timestamp":{"order":"desc"}},
  "query":[
      {
        "range":{
          "timestamp":{"gte":"2013-11-18T05:00:00+00:00","lte":"2013-12-02T05:00:00+00:00"}
        }
      },
      {
        "query":{
          "match":{"severity":{"query":"medium","operator":"or"}}
        }
      },
      {
        "query":{
          "constantScore":{
            "filter":{
              "query":{
                "query_string":{"default_field":"_all","query":"10.1.10.22"}
              }
            }
          }
        }
      }
  ]
}

2 个答案:

答案 0 :(得分:2)

我认为您需要阅读有关Query DSL的更多信息。根据您的输入,这是正确的查询:

{
  "query": {
    "query_string": {
      "default_field": "_all",
      "query": "10.1.10.22"
    }
  },
  "filter": {
    "bool": {
      "must": [
        {
          "range": {
            "timestamp": {
              "gte": "2013-11-18T05:00:00+00:00",
              "lte": "2013-12-02T05:00:00+00:00"
            }
          }
        },
        {
          "term": {
            "severity": "medium"
          }
        }
      ]
    }
  }
}

以上查询可以解释为: - 首先使用bool过滤器过滤数据,"必须"这里可以理解为" AND"。因此,数据将按"范围内的时间戳过滤..." AND" serverity = medium" - 然后使用" query_string"搜索过滤后的数据。 这将使您的搜索更快。

答案 1 :(得分:0)

在任何情况下,您的查询格式都不正确。如果要组合多个查询,可以使用bool查询。请参阅文档:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html