如何在开发工具查询中使用“或”

时间:2019-12-29 20:18:36

标签: elasticsearch elasticsearch-5 kibana-7

您好,贝娄搜索向我提供了同时包含“值”:“ HB”和“值”:“ 1234567”的日志,因为我正在使用Term,但是,如果此匹配项,我正在寻找什么

("value": "HB" OR "value": "TR" ) AND "value": "1234567"

但不理解下面的操作, 谁能帮我

获取_search

{ "query": { "bool": { "must": [ { "match": {"log.file.path":"mylog.log" } }


     {
       "term": {
          "GPS-LOG.COMMAND": {
           "value": "HB"
         }
       }
     },
      {
      "term": {
          "GPS-LOG.IMEI": {
           "value": "1234567"
         }
       }
     }



   ],   "filter": {
     "range": {
       "@timestamp": {
         "gte": "now-10m"
       }
     }   }
     } }

1 个答案:

答案 0 :(得分:0)

乍一看,似乎应该有一个简单的解决方案。但是,由于您正在使用 term 查询,因此一次只能搜索一个值。我不知道您的映射,但是如果您使用的是文本字段,则不应该使用术语查询。

但是,要使用 term 查询解决此问题,您必须使用 minimum_should_match 应结合使用来创建 OR 运算符

请参见以下代码:

GET _search 
   { 
   "query":{ 
      "bool":{ 
         "must":[ 
            { 
               "match":{ 
                  "log.file.path":"mylog.log"
               }
            },
            { 
               "term":{ 
                  "GPS-LOG.IMEI":{ 
                     "value":"1234567"
                  }
               }
            },
            { 
               "bool":{ 
                  "should":[ 
                     { 
                        "term":{ 
                           "GPS-LOG.COMMAND":{ 
                              "value":"HB"
                           }
                        }
                     },
                     { 
                        "term":{ 
                           "GPS-LOG.COMMAND":{ 
                              "value":"TR"
                           }
                        }
                     }
                  ],
                  "minimum_should_match":1
               }
            }
         ],
         "filter":{ 
            "range":{ 
               "@timestamp":{ 
                  "gte":"now-10m"
               }
            }
         }
      }
   }
}