# Introducing the Query Language（介绍查询语言）

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_introducing_the_query_language.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.4/_introducing_the_query_language.html)

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4260757](http://www.apache.wiki/pages/viewpage.action?pageId=4260757)

贡献者 : [那伊抹微笑](/display/~wangyangting)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

**Elasticsearch** 提供了一个可以执行查询的 **Json** 风格的 **DSL**（**domain-specific language** 领域特定语言）。这个被称为 [Query DSL](https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl.html "Query DSL")。该查询语言非常全面，并且刚开始的时候感觉有点复杂，真正学好它的方法是从一些基础的示例开始的。

回到我们上个例子，我们执行了这个查询 : 

```
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
  "query": { "match_all": {} }
}'
```

分析上面的查询，**query** 部分告诉我们查询是如何定义的，**match_all** 部分就是我们要运行查询的简单的类型。该 **match_all** 查询简单的搜索了指定所有的所有文档。

除了 **query** 参数之外，我们也可以传递其它的参数以改变查询结果。在上部分的例子中我们传递了 **sort**，这里我们将传递 **size** : 

```
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
  "query": { "match_all": {} },
  "size": 1
}'
```

注意，如果不指定 **size**，默认为 **10**.

下面的例子做了一个 **match_all** 并且返回了 **11** 到 **20** 的文档。

```
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}'
```

该 **from** 参数（**0** 为基础）指定了文档开始的编号，**size** 参数指定了从 **from** 参数开始有多少个文档被返回。在实现搜索结果分页时这个功能是很有用的。注意，如果不指定 **from** 参数，默认为 **0**。

下面的例子做了一个 **match_all**，以及对结果通过账户余额按降序排序，并且返回了 **top 10**（默认大小）的文档。

```
curl -XGET 'localhost:9200/bank/_search?pretty' -d'
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}'
```