一、查询语句形式 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 这个故意写错了