Elasticsearch查询语法(一)

袁志蒙 1788次浏览

摘要:通过ES查询表达式(Query DSL),可以实现复杂的查询功能,ES查询表达式主要由JSON格式编写,可以灵活的组合各种查询语句。一.查询基本语法...

通过ES查询表达式(Query DSL),可以实现复杂的查询功能,ES查询表达式主要由JSON格式编写,可以灵活的组合各种查询语句。

一.查询基本语法结构

POST /{索引名}/_search
{
	"from" : 0,  // 返回搜索结果的开始位置
  	"size" : 10, // 分页大小,一次返回多少数据
  	"_source" :[ ...需要返回的字段数组... ],
	"query" : { ...query子句... },
	"aggs" : { ..aggs子句..  },
	"sort" : { ..sort子句..  }
}

{索引名},支持支持一次搜索多个索引,多个索引使用逗号分隔,例子:

POST /order1,order2/_search

按前缀匹配索引名:

POST /order*/_search

当我们执行查询语句,返回的JSON数据格式如下:

{
  "took" : 5, // 查询消耗时间,单位毫秒 
  "timed_out" : false, // 查询是否超时
  "_shards" : { // 本次查询参与的ES分片信息,查询中参与分片的总数,以及这些分片成功了多少个失败了多少个
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : { // hits字段包含我们搜索匹配的结果
    "total" : { // 匹配到的文档总数
      "value" : 1, // 找到1个文档
      "relation" : "eq"  //文档总数关系(relation)是真实值(eq),还是大于值(gte),当为gte时,获取到的value值是不准确的
    },
    "max_score" : 1.0, // 匹配到的最大分值
    "hits" : [ 
         // 这里就是我们具体的搜索结果,是一个JSON文档数组
    ]
  }
}

query子句

query子句主要用来编写类似SQL的Where语句,支持布尔查询(and/or)、IN、全文搜索、模糊匹配、范围查询(大于小于)。

aggs子句

aggs子句,主要用来编写统计分析语句,类似SQL的group by语句

sort子句

sort子句,用来设置排序条件,类似SQL的order by语句

二、ES查询分页

ES查询的分页主要通过from和size参数设置,类似MYSQL 的limit和offset语句

例子:

POST /order_v2/_search
{
  "from": 0,
  "size": 20, 
  "query": {
    "match_all": {}
  }
}

查询所有数据,从第0条数据开始,一次返回20条数据。

_source属性

_source用于设置查询结果返回什么字段,类似Select语句后面指定字段(field)。

例子:

POST /order_v2/_search
{
  "_source": ["order_no","shop_id"], 
  "query": {
    "match_all": {}
  }
}

仅返回,order_no和shop_id字段。


随机内容

表情

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~