elasticsearch 如何在match中使用AND运算符(Kibana开发工具),elasticsearch,kibana,elasticsearch,Kibana" /> elasticsearch 如何在match中使用AND运算符(Kibana开发工具),elasticsearch,kibana,elasticsearch,Kibana" />

elasticsearch 如何在match中使用AND运算符(Kibana开发工具)

elasticsearch 如何在match中使用AND运算符(Kibana开发工具),elasticsearch,kibana,elasticsearch,Kibana,我正在使用开发工具,Bellow查询在Kibana Discover中运行良好 log.file.path:*MY.log* AND "[COMMAND:HEARTBEAT]" AND "[CHARGING:0]" 但是当我在Dev工具中做同样的事情时,它只需要心跳,但是它显示了所有数据,其中充电0和1,但我只需要0 GET filebeat-*/_search { "size": 1000, "query": { "bool": { "must": [

我正在使用开发工具,Bellow查询在Kibana Discover中运行良好

log.file.path:*MY.log*    AND "[COMMAND:HEARTBEAT]"  AND "[CHARGING:0]"
但是当我在Dev工具中做同样的事情时,它只需要心跳,但是它显示了所有数据,其中充电0和1,但我只需要0


GET filebeat-*/_search
{
  "size": 1000,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "log.file.path": "LOG.log"
          }
        },
        {
          "term": {
            "COMMAND": {
              "value": "HEARTBEAT"
            }
          }
        },
        {
          "term": {
            "CHARGING": {
              "value": "0"
            }
          }
        }
      ],
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "now-15m"
          }
        }
      }
    }
  }
}
日志映射 同样的日志,我得到2路, 一个在消息中,通过使用logstash,我将转换为Json,我在这里添加了这两个

{
  "_index": "filebeat-7.2.0-2019.09.14",
  "_type": "_doc",
  "_id": "Aps9MW0BBmrGS9dAswgZ",
  "_version": 1,
  "_score": null,
  "_source": {
    "ecs": {
      "version": "1.0.0"
    },
    "@version": "1",
    "message": "[COMMAND:HEARTBEAT],[GPS STATUS:true],[INFO:false],[SIGNAL:false],[ENGINE:0],[DOOR:0],[LON:0],[LAT:0],[SPEED:0.0],[HEADING:-1.0],[BATTERY:100.0%],[CHARGING:0],[O&E:CONNECTED],",


    "GPS-LOG": {
      "O&E": "CONNECTED",
      "GPS POS": "true",
      "ENGINE": "0",
      "COMMAND": "HEARTBEAT",
      "GSM_SIGNAL": "75",

      "CHARGING": "0",
      "HEADING": "-1.0",
      "FUEL": "0.0V/0.0%",
      "SPEED": "0.0",
      "GPS STATUS": "true",
      "ALARM": "NONE",
      "BATTERY": "100.0%",
      "TIMESTAMP": "null",
      "LON": "0",
      "LAT": "0",
      "DOOR": "0",
      "SERIAL": "1670",
      "SIGNAL": "false",
      "INFO": "false",
      "GPS_SATS": "11"
    },

我真正的日志是这个

    18:15:53,909 DEBUG [com.] (default-threads - 57) (338)>[TIMESTAMP:Sun Sep 15 18:15:53 UTC 2019],[COMMAND:INFO],[GPS STATUS:true],[INFO:true],[SIGNAL:false],[ENGINE:0],[DOOR:0],[LON:90],[LAT:2],[SPEED:0.0],[HEADING:240.0],[BATTERY:83.0%],[CHARGING:0],[O&E:CONNECTED],[GSM_SIGNAL:100],[GPS_SATS:8],[GPS POS:true],[FUEL:0.0V/0.0%],[ALARM:NONE],[SERIAL:03AA]

感谢您的帮助

Kibana Discovery使用Lucene语法(Lucene是搜索引擎/技术Elasticsearch的基础)让您可以查询数据。但是,当您通过DevTool发送请求时,基本上会调用Elasticsearch REST API。您可以使用Lucene语法

您的第二个匹配查询是问题:

我假设您希望搜索精确匹配(command==HEARTBEAT;charging==0)。但是通过匹配查询,您可以对字段进行全文搜索

您不需要使用匹配查询,而需要使用。因此,在第一次匹配查询之后,您将在must子句中定义两个术语查询(一个用于command字段,一个用于charging字段)。请注意,当使用must子句时,它会自动对其中的所有查询应用AND运算符

这是查询的外观(未经测试):


或者你可以搜索命令。关键字字段。

嗨,我尝试过但没有给出任何东西,我的日志是这样的```[命令:心跳],[GPS状态:真],[信息:假],[信号:假],[引擎:0],[门:0],[LON:0],[LAT:0],[航向:-1.0],[电池:100.0%],[充电:0]``,因为我使用的是储藏室,我也会以JSON的形式获取日志,因此无论哪种方式,我都很高兴能够获得,然后请共享您对相关数据的映射。我用日志映射编辑了Questino部分,我的日志以消息的形式提交,并且通过使用logstash我将转换为JSON,我添加了两个您所指的映射?对不起,我对ES非常了解,我刚刚在Questino部分添加了我的真实日志,您是指映射吗?还使用真实日志编辑了问题,并在解决方案部分提供了搜索建议
GET filebeat-*/_search
{
  "size": 1000,
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "log.file.path": "MYlog"
          }
        },
        {
          "term": {
            "command": {
              "value": "HEARTBEAT"
            }
          }
        },
        {
          "term": {
            "charging": {
              "value": 0
            }
          }
        }
      ],
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "now-15m"
          }
        }
      }
    }
  }
}