ElasticSearch常用操作:查询与聚合篇

  (TOC)

  <人力资源/>   

0说明

  

基于es 5.4和es 5.6,列举的是个人工作中经常用到的查询(只是工作中使用的是Java API),如果需要看完整的,可以参考官方相关文档
https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search.html。

  

1查询

  

先使用一个快速入门来引入,然后后面列出的各种查询都是用得比较多的(在我的工作环境是这样),其它没怎么用的这里就不列出了。

  

1.1快速入门

  
1.1.1查询全部
  
 <代码类=" language-json ">得到索引/类型/_search
  {
  "查询":{
  “match_all”: {}
  }
  } 
  

  
 <代码类=" language-json ">得到索引/类型/_search  
  
1.1.2分页(以词为例)
  
 <代码类=" language-json ">得到索引/类型/_search
  {
  “从”:0,
  “大小”:100年,
  "查询":{
  “":{
  “区域”:“广州”
  }
  }
  } 
  
1.1.3包含指定字段(以词为例)
  
 <代码类=" language-json ">得到索引/类型/_search
  {
  “_source”:“爱好”、“名称”,
  "查询":{
  “":{
  “区域”:“广州”
  }
  }
  } 
  
1.1.4排序(以词为例)
  

单个字段排序:

  
 <代码类=" language-json ">得到索引/类型/_search
  {
  "查询":{
  “":{
  “区域”:“广州”
  }
  },
  “排序”:(
  {" user_id ":{“秩序”:“asc}},
  {"工资":{“秩序”:“desc}}
  ]
  } 
  

1.2全文查询

  

查询字段会被索引和分析,在执行之前将每个字段的分词器(或搜索分词器)应用于查询字符串。

  
1.2.1匹配查询
  
 <代码类=" language-json "> {
  "查询":{
  "匹配":{
  "内容":{
  “查询”:“里皮恒大”,
  “操作符”:”和“
  }
  }
  }
  } 
  
  

操作符默认是或者,也就是说,“里皮恒大”被分词为“里皮”和“恒大”,只要内容中出现两个之一,都会搜索到,设置为,之后,只有同时出现都会被搜索到。

     
1.2.2 match_phrase查询
  

文档同时满足下面两个条件才会被搜索到:

  
      <李>(1)分词后所有词项都要出现在该字段中李   <李>(2)字段中的词项顺序要一致李   
  
 <代码类=" language-json "> {
  "查询":{
  " match_phrase ": {
  “内容”:“里皮恒大”
  }
  }
  } 
  

1.3词项查询

  

词项搜索时对倒排索引中存储的词项进行精确匹配,词项级别的查询通过用于结构化数据,如数字,日期和枚举类型。

  
1.3.1术语查询
  
 <代码类=" language-json "> {
  "查询":{
  “":{
  “推迟日期”:“2015-12-10 00:41:00”
  }
  }
  } 
  
1.3.2术语查询
  

术语的升级版,如上面查询的推迟日期字段,可以设置多个。

  
 <代码类=" language-json "> {
  "查询":{
  “条款”:{
  “推迟日期”:[
  “2015-12-10 00:41:00”,
  “2016-02-01 01:39:00”
  ]
  }
  }
  } 
  
  

因为术语是精确匹配,所以不要问,[]中的关系怎么设置,这怎么可能,既然是精确匹配,一个字段也不可能有两个不同的值。

     
1.3.3范围查询
  

匹配某一范围内的数据型,日期类型或者字符串型字段的文档,注意只能查询一个字段,不能作用在多个字段上。

  

数值:   

 <代码类=" language-json "> {
  "查询":{
  “范围”:{
  “回复”:{
  “一种”:245年,
  “lte”: 250
  }
  }
  }
  } 
  
  

支持的操作符如下:

  

gt:大于一种:大于等于,lt:小于,lte:小于等于

     

日期:   

 <代码类=" language-json "> {
  "查询":{
  “范围”:{
  "推迟日期":{
  “gte”:“2016-09-01”就是,
  “lte”:“2016-09-30 23:59:59”,
  “格式”:“yyyy-MM-dd HH: mm: ss”
  }
  }
  }
  } 
  
  

格式不加也行,如果写的时间格式正确。

     
1.3.4存在查询
  

ElasticSearch常用操作:查询与聚合篇