ES 5.x中在精准搜索时的过滤方式

本文探讨了在Elasticsearch中如何实现精确匹配特定请求路径的问题,特别是在使用Kibana Discover进行过滤时,通过调整字段类型从text到keyword,解决了模糊匹配导致的结果不准确问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一直有个问题没解决,比如希望通过kibana的Discover里的filter去过滤某个域名,request为"/"的请求,需求是精确匹配:

那么在Dev Tools里对应的查询应该和下面类似:

GET index-example/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"http_host": "test.xxx.com"}},
        {"match": {"request": "/"}}
      ]
    }
  }
}

搜索出来的日志中是不符合需求的,所有request里包含"/"这个字符的请求都被检索到了。

后来了解到2.x版本中的string类型在5.x分为text(默认类型)和keyword。text类似2.x中的analyzed,是要被分词的,整个字符串根据一定规则分解成一个个小写的term,而keyword类似2.x中not_analyzed的情况。

如果你希望检索"good"的时候,可以检索到"this is a good idea",那么使用默认方式即可。

如果你希望检索"good"的时候,只检索到"good",那么应该使用keyword的方式。

例如上述查询语句,我们可以如此修改

GET index-example/_search
{
  "query": {
    "bool": {
      "must": [
        {"match": {"http_host.keyword": "test.xxx.com"}},
        {"match": {"request.keyword": "/"}}
      ]
    }
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值