[英]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.