2017-03-13 165 views
0

這裏是我已經存儲在ES的示例記錄:Elasticsearch多個字段或查詢

"taskCurateStatus": true, 
    "taskMigrateStatus": true, 
    "verifiedFields": 7, 
    "taskId": "abcdef123", 
    "operatorEmail": "[email protected]" 

Example Query I'm making via /_search: 
{ 
    "sort": [ 
    { 
     "@timestamp": { 
     "order": "desc" 
     } 
    } 
    ], 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "msg.operator_email": "[email protected]" 
      } 
     } 
     { 
      "range": { 
      "@timestamp": { 
       "gte": "2017-03-05", 
       "lte": "2017-03-12" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "from": 0, 
    "size": 50 
} 

基本上我想也由要麼taskCurateStatustaskMigrateStatus是真實的文件進行篩選。有些消息只定義了其中的一個。我正在考慮使用should查詢,但不知道如何使用match查詢。任何幫助,將不勝感激。謝謝

回答

2

你可以在你的必須過濾器中添加另一個布爾過濾器。這個布爾過濾器可以implemenet的應該where子句中你可以用一個比較布爾標誌應該過濾組合這兩個布爾檢查過濾器

{ 
    "sort": [{ 
     "@timestamp": { 
      "order": "desc" 
     } 
    }], 
    "query": { 
     "bool": { 
      "must": [{ 
       "match": { 
        "msg.operator_email": "[email protected]" 
       } 
      }, { 
       "range": { 
        "@timestamp": { 
         "gte": "2017-03-05", 
         "lte": "2017-03-12" 
        } 
       } 
      }, { 
       "bool": { 
        "should": [{ 
         "term": { 
          "taskCurateStatus": { 
           "value": true 
          } 
         } 
        }, { 
         "term": { 
          "taskMigrateStatus": { 
           "value": true 
          } 
         } 
        }] 
       } 
      }] 
     } 
    }, 
    "from": 0, 
    "size": 50 
} 

看看上面的查詢,看看是否有助於 感謝

相關問題