ELK-ElasticSearch-查询

查询msg字段中包含 receive order signal 和 -2 的信息,(不要包含2的,只要-2的)

1.普通query:

  1. {
  2.   "query": {
  3.     "bool": {
  4.       "must": [
  5.         {
  6.           "match_phrase": {
  7.             "msg": "\\-2"
  8.           }
  9.         },
  10.         {
  11.           "match":{"msg":"receive order signal"}
  12.         }
  13.       ]
  14.     }
  15.   }
  16. }
  17. 这种方式可能会查询出2和-2的msg,因为es默认的分词器(标准分词器)在分词时,会删除特殊字符

 

2.使用query_string

  1. {
  2.   "query":{
  3.     "query_string" : {
  4.             "default_field" : "msg",
  5.             "analyzer" : "whitespace",
  6.             "query" : "\\-2 AND receive AND order AND signal"
  7.         } 
  8.     }
  9. }
  10. 这种方式还是不行,原因应该和上面一样

 

3.使用keyword字段:

  1. {
  2.   "query": {
  3.     "wildcard": {
  4.       "msg.keyword": {
  5.         "value": "*receive*order*signal*-2*"
  6.       }
  7.     }
  8.   }
  9. }
  10. Wildcard模糊匹配查询(*),查询msg的keyword字段


解析:

对于text类型的字段,es使用了一种基于内存的数据结构:fielddata来实现类似于正排索引的功能,以达到加速排序和聚合的目的。它是通过读取磁盘上的每个 segment(片段)的整个反向索引来构建的,将 term(词条)和 document(文档)关系反转,并将结果存储在内存中,在JVM的堆中。它默认是关闭的,因为它太占用内存。

而doc_value也是一个类似于正排索引的结构,它对大多数字段都是默认开启的(text字段不持之),并且数据类型为keyword,它不会创建分词,直接存储在磁盘上,因此匹配查询时,是可以使用keyword字段的。

 

转载于:https://my.oschina.net/u/3244997/blog/1842841

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值