0

嗨,波纹管搜索为我提供了日志,它同时具有“值”:“HB”和“值”:“1234567”,因为我使用的是术语,但是,如果匹配,我正在寻找什么

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

但不明白如何在下面做,任何人都可以帮助我

获取_搜索

{ "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"
       }
     }   }
     } }
4

1 回答 1

0

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

但是,要使用术语查询解决此问题,您必须使用minimum_should_matchshould创建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"
               }
            }
         }
      }
   }
}
于 2019-12-29T22:40:03.140 回答