如何在elasticsearch中结合query_string和时间戳范围

hud*_*udi 5 python elasticsearch

我有两个疑问。一种是在日志消息中搜索,第二种是在时间戳范围内搜索。

query = {
    "query": {
        "query_string" : {
            "query" : "logmessage:test"
        }
    }
Run Code Online (Sandbox Code Playgroud)

和

query = {
    "query": {
"range" : {
            "@timestamp" : {
                "lte" : "2017-08-04"
            }                   
        }
    }
Run Code Online (Sandbox Code Playgroud)

我如何创建一个具有这两种选项的产品?我试过这个:

    query = {
        "query": {
            "query_string" : {
                "query" : "logmessage:test"
            },
    "range" : {
                "@timestamp" : {
                    "gte" : "2017-08-04",
                    "lte" : "now"
                }                   
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但没有成功。我猜有一些 400 错误是因为语法错误

Mar*_*lze 6

您正在寻找 bool 查询https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html。您可以使用 should、must、must_not 和 filter 子句将多个查询组合为一个查询:

{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "@timestamp": {
              "lte": "2017-08-04"
            }
          }
        },
        {
          "query_string": {
            "query": "logmessage:test"
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)