ElasticSearch查询:基本语法

来自Wikioe
跳到导航 跳到搜索


关于

通过 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 查询的分页主要通过 fromsize 参数设置,类似 MYSQL 的 limit 和 offset 语句。


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

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