簡體   English   中英

如何使用 AND 條件編寫 ElasticSearch 查詢

[英]How to write ElasticSearch query with AND condition

我正在嘗試編寫一個彈性搜索查詢來搜索具有兩個條件的數據,如下所示

{
  "query": {
    "match": {
      "trackingId": "track4324234234244",
      "log_message": "downstream request-response"
    }
  }
}

上述查詢不起作用,因為 [match] 查詢不支持多個字段。 有沒有辦法我可以做到這一點。

您可以使用Bool query ,其中可以使用must子句。

must表示:子句(查詢)必須出現在匹配的文檔中。 這些子句必須匹配,例如邏輯 AND。

要了解 must 和 should 之間的區別,請參考這個SO answer

添加帶有示例文檔和搜索查詢的工作示例

索引樣本數據:

{
    "trackingId":"track4324234234244",
    "log_message":"downstream request-response"
}
{
    "trackingId":"track4324234234244",
    "log_message":"downstream"
}
{
    "trackingId":"tracks4324234234244",
    "log_message":"downstream request-response"
}

搜索查詢:

    {
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "trackingId": "track4324234234244"
          }
        },
        {
          "match": {
            "log_message": {
              "query": "downstream request-response",
              "operator": "and"
            }
          }
        }
      ]
    }
  }
}

搜索結果:

"hits": [
        {
            "_index": "my_index",
            "_type": "_doc",
            "_id": "1",
            "_score": 1.8570712,
            "_source": {
                "trackingId": "track4324234234244",
                "log_message": "downstream request-response"
            }
        }
    ]

除了Bool ,您還可以使用如下所述的simple query string

POST <your_index_name>/_search
{
  "query": {
    "simple_query_string": {
      "fields": ["trackingId", "log_message"],
      "query": "track4324234234244 downstream request-response",
      "default_operator": "AND"
    }
  }
}

請注意我剛剛添加了所有術語並使用了default_operator: AND以便它只返回包含所有術語的文檔。

還有query_string但是我建議使用上面的一個,因為query_string以嚴格的方式工作,如果查詢字符串有任何語法錯誤,而simple_query_string沒有,它會拋出錯誤。

POST <your_index_name>/_search
{
  "query": {
    "query_string": {
      "fields": ["trackingId", "log_message"],
      "query": "(track4324234234244) AND (downstream request-response)",
      "default_operator": "AND"
    }
  }
}

至於何時使用simple_query_string ,主要是僅當您想向最終用戶公開查詢字符串或術語時,這將是有用的。

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM