让我们以最简单search API的形式开启我们的旅程,空查询将返回所有索引库(indices)中的所有文档:

  1. GET /_search
  2. {} 1
  1. 这是一个请求体

只用一个查询字符串,你就可以在一个、多个或者_all 索引库(indices)和一个、多个或者所有types中查询:

GET /index_2014*/type1,type2/_search
{}

同时你可以使用form和size 参数来分页

GET /_search
{
  "from": 30,
  "size": 10
}

一个请求体的GET请求?

某些特定语言(特别是Javascript)的HTTP库是不允许GET请求带有请求体的。事实上,一些使用者对于GET请求可以带请求体感到非常的吃惊。

而事实是这个RFC文档 RFC 7231— 一个专门负责处理HTTP 语义和内容的文档——并没有规定一个带有请求体的GET 请求应该如何处理!结果是,一些HTTP服务器允许这样子,而有一些——特别是用于缓存和代理的服务器——则不允许。

对于一个查询请求。Elasticsearch的工程师偏向于使用GET方式,因为他们觉得他比POST能更好的描述信息检索(retrieving information)的行为。然而,因为带请求体的GET 请求并不被广泛支持,所以search API同时支持POST请求:

POST /_search
{
  "from": 30,
  "size": 10
}

类似的规则可以应用于任何需要带请求体的GET API

我们将在聚合 聚合 章节深入介绍聚合(aggregations),而现在,我们将聚焦在查询。

相对于使用晦涩难懂的查询字符串的方式,一个带请求体的查询允许我们使用查询领域特定语言(query domain-specific language)或者 Query DSL来写查询语句。