ES中的查询

2018-04-28 12:56:36 浏览数 (1)

一、查询语句形式 1.叶子语句 2.复合语句(一条复合语句可以是多条叶子语句和多个复合语句组成)

二、查询和过滤的区别 1.过滤是将查询设置为是否匹配(只有是和否两种情况),查询会缓存 2.查询是判断文档是否匹配同时判断文档的匹配程度(_score字段),查询不缓存 三、查询 1.match_all查询简单的匹配所有文档 { “match_all”: {}} 2.match匹配指定字段(可能是精确查询也可能是全文查询) {“match”: {“age”:26 }} 3.multi_match在多个字段上执行match查询 “multi_match”: { “fields”:[“about” ,”first_name” ],        “query”: “build too” } 4.range查询找出落在指定区间内的数字或者时间 {     “range”: {         “age”: {             “gte”:  20,             “lt”:   30         }     } } gt 大于 gte 大于等于 lt 小于 lte 小于等于 5.term查询用于精确匹配 { “term”: { “age”:    26           }} 6.terms查询允许指定多个值匹配 { “terms”: { “age”:    [26,25]           }} 7.exists查询文档中包含指定字段有值 {     “exists”:   {         “field”:    “create_time”     } } 备注:Missing Query is removed in ES 5.0.

四、组合多查询 a)使用bool查询可以满足如下条件 1.must 文档必须匹配这些条件 2.must_not 文档必须不匹配这些条件 3.should 满足条件当中任意语句 4.filter 必须匹配(不评分,根据过滤条件来筛选文档) bool查询案例: GET megacorp/employee/_search {   “query”:{     “bool”: {         “must”:{ “match”: { “about”: “build ” }         },         “filter”: {           “match”: {“age”:26}         }     }   } }

b)使用constant_score可以取代只有filter的bool查询 constant_score查询案例: GET megacorp/employee/_search {   “query”:{     “constant_score”: {         “filter”: {           “match”: {“age”:26}         }     }   } }

五、验证查询 _validate/query 检查查询语法是否合法 _validate/query?explain 分析查询错误信息 验证查询使用案例: GET megacorp/employee/_validate/query {    “query”: {       “match2” : {          “4age” : “a2t”       }    } } 备注:match2 这个故意写错了

es2

0 人点赞