ElasticSearch查询:基本语法
跳到导航
跳到搜索
关于
通过 ES 查询表达式(Query DSL),可以实现复杂的查询功能,ES 查询表达式主要由 JSON 格式编写,可以灵活的组合各种查询语句。
查询基本语法结构
GET /{索引名}/_search
{
"from" : 0, // 返回搜索结果的开始位置
"size" : 10, // 分页大小,一次返回多少数据
"_source" :[ ...需要返回的字段数组... ],
"query" : { ...query子句... },
"aggs" : { ..aggs子句.. },
"sort" : { ..sort子句.. }
}
其中,“{索引名}”:
- 支持一次搜索多个索引,多个索引使用逗号分隔。如:
GET /order1,order2/_search
- 支持按前缀匹配索引名。如:
GET /order*/_search
查询结果格式:
{
"took" : 5, // 查询消耗时间,单位毫秒
"timed_out" : false, // 查询是否超时
"_shards" : { // 本次查询参与的 ES 分片信息,查询中参与分片的总数,以及这些分片成功了多少个失败了多少个
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : { // hits字段包含我们搜索匹配的结果
"total" : { // 匹配到的文档总数
"value" : 1, // 找到1个文档
"relation" : "eq"
},
"max_score" : 1.0, // 匹配到的最大分值
"hits" : [
// 这里就是我们具体的搜索结果,是一个 JSON 文档数组
]
}
}
_source
_source 用于设置查询结果返回字段,类似 Select 语句后面指定字段。
示例:仅返回 order_no 和 shop_id 字段。
GET /order_v2/_search
{
"_source": ["order_no","shop_id"],
"query": {
"match_all": {}
}
}
query子句
query 子句主要用来编写条件语句,类似 SQL 的 Where 语句,支持布尔查询(and/or)、IN、全文搜索、模糊匹配、范围查询(大于小于)。
aggs子句
aggs子句,主要用来编写统计分析语句,类似 SQL 的 group by 语句。
sort子句
sort子句,用来设置排序条件,类似 SQL 的 order by 语句。
ES查询分页
ES 查询的分页主要通过 from 和 size 参数设置,类似 MYSQL 的 limit 和 offset 语句。
示例:查询所有数据,从第 0 条数据开始,一次返回 20 条数据。
GET /order_v2/_search
{
"from": 0,
"size": 20,
"query": {
"match_all": {}
}
}