ES中的查询

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



Tagged , , . Bookmark the permalink.

Comments are closed.