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