ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 请求体查询 简单查询语句(lite)是一种有效的命令行_adhoc_查询。但是,如果你想要善用搜索,你必须使用请求体查询(request body `search`)API。之所以这么称呼,是因为大多数的参数以JSON格式所容纳而非查询字符串。 请求体查询(下文简称查询),并不仅仅用来处理查询,而且还可以高亮返回结果中的片段,并且给出帮助你的用户找寻最好结果的相关数据建议。 ### 空查询 我们以最简单的 `search` API开始,空查询将会返回索引中所有的文档。 ```Javascript GET /_search {} <1> ``` - <1> 这是一个空查询数据。 同字符串查询一样,你可以查询一个,多个或`_all`索引(indices)或类型(types): ```Javascript GET /index_2014*/type1,type2/_search {} ``` 你可以使用`from`及`size`参数进行分页: ```Javascript GET /_search { "from": 30, "size": 10 } ``` ************************************************* 携带内容的`GET`请求? 任何一种语言(特别是js)的HTTP库都不允许`GET`请求中携带交互数据。 事实上,有些用户很惊讶`GET`请求中居然会允许携带交互数据。 真实情况是,http://tools.ietf.org/html/rfc7231#page-24[RFC 7231], 一份规定HTTP语义及内容的RFC中并未规定`GET`请求中允许携带交互数据! 所以,有些HTTP服务允许这种行为,而另一些(特别是缓存代理),则不允许这种行为。 Elasticsearch的作者们倾向于使用`GET`提交查询请求,因为他们觉得这个词相比`POST`来说,能更好的描述这种行为。 然而,因为携带交互数据的`GET`请求并不被广泛支持,所以`search`API同样支持`POST`请求,类似于这样: ```Javascript POST /_search { "from": 30, "size": 10 } ``` 这个原理同样应用于其他携带交互数据的`GET`API请求中。 ************************************************* 我们将在后续的章节中讨论聚合查询,但是现在我们把关注点仅放在查询语义上。 相对于神秘的查询字符串方法,请求体查询允许我们使用结构化查询Query DSL(Query Domain Specific Language)