ElasticSearch DSL入门只 match_pharse

在将日志信息使用Elastic检索之后,可以使用ElasticSearch强大的日志搜索功能来实现日志的查询工作.这里介绍下GET相关的方法

GET 方法

GET _template
GET index
GET _cat/indices
GET _cat/tasks
GET _cat/aliases
GET _cat/count
GET _cat/allocation
GET _cat/nodes
GET _cat/templates
GET _cat/master
GET _cat/health
GET _alias
GET _aliases
GET _all
GET _count
GET _stats
GET _validate/query
GET _search_shards

GET /_search

看些这里的demo

从``中的message 字段中搜索,同时满足四个条件的日志信息

  1. message中有/xxxxrds
  2. message中有match_pharse1
  3. message中有match_pharse2
  4. message中没有not match phare1
GET logstash-2020.07*/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "message": "/xxxxrds"
          }
        },
        {
          "match_phrase": {
            "message": "match_pharse1"
          }
        },
        {
          "match_phrase": {
            "message": "match_pharse2"
          }
        }
      ],
      "must_not": [
        {
          
          "match_phrase": {
            "message": "not match phare1"
          }
        }
      ]
    }
  },
    "highlight": { # 突出显示查询得到的关键信息.
    "fields": {
      "message":{}
    }
  }, 
  "sort": [
    {
      "@timestamp": { # 根据时间降序排列
        "order": "asc"
      }
    }
  ],
  "size": 10000  # 搜索的上线是10000,默认是200
}

返回的结果:

{
  "took": 12,  # 耗时12毫秒
  "timed_out": false, # 没有超时
  "_shards": {  # 查询了多少个分配
    "total": 50, # 总共查询了50个
    "successful": 50,  # 有50个成功了
    "skipped": 0,
    "failed": 0
  },
  "hits": {  # 命中的文档信息
    "total": 2,  # 总共命中了额几次?
    "max_score": null,
    "hits": [  # 命中的文档具体内容信息
        {
        "_index": "logstash-2020.07.07",
        "_type": "xxxx_index",
        "_id": "xxxxxxid",
        "_score": null,
        "_source": {   # 命中的文档本身
          "@timestamp": "2020-07-07T07:41:38.000Z",
          "level": "INFO ",
          "thread": "io-8443-exec-741",
          "package": "xxxx.RequestLogFilter",
          "message":"The message you want to search xxxxxxxxxxxxxxxxxxxx",
          "sort": [
          1594107698000
        ]
        }
    ]
    }
}

执行的效果图
ElasticSearch dev tools

你遇到的问题可能是由于Elasticsearch的分析器配置不正确导致的。当使用match_phrase查询时,默认情况下,Elasticsearch会应用分析器来对查询字符串进行分词处理,然后再与索引中的文本进行匹配。对于中文文本,分析器可能会将文本按照字或词进行分词,而对于数字和英文文本,可能会按照空格或标点符号进行分词。这就导致了在使用match_phrase查询时无法准确匹配数字和英文。 要解决这个问题,你可以考虑以下几种方法: 1. 明确指定要匹配的字段的分析器:你可以通过显式地指定要匹配的字段的分析器,确保分析器适用于数字和英文文本。例如,可以使用keyword分析器来保持字段的原始内容不变。 2. 自定义分析器:你可以创建自定义分析器,根据你的需求对数字和英文文本进行适当的分词处理。可以使用字符过滤器、分词器和标记过滤器等组件来定义自定义分析器。 3. 使用term查询:如果你希望精确匹配数字和英文文本,可以考虑使用term查询而不是match_phrase查询。term查询不会应用分析器,直接将查询字符串与索引中的词条进行精确匹配。 请注意,在使用以上方法时,还需要确保索引中的字段映射与你的需求相匹配,例如字段类型、分析器等设置。此外,还可以考虑使用其他查询类型,如match查询或query_string查询,根据具体情况选择合适的查询方式。 希望这些信息能帮助你解决问题!如有更多疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值