Elasticsearch之请求体查询(request body search)。
来源:互联网 发布:c语言打印搞笑图形 编辑:程序博客网 时间:2024/06/04 01:07
请求体查询(request body search)
简单查询语句(lite)是一种有效的命令行adhoc查询。但是,如果你想要善用搜索,你必须使用请求体查询(request body search) API。之所以这么称呼,是因为大多数的参数以JSON格式所容纳而非查询字符串。
请求体查询(以下简称查询),并不仅仅用于处理查询,而且还可以高亮返回结果中的片段,并且给出帮助你的用户找寻最好结果的相关数据建议。
空查询
我们以最简单的search API开始,空查询将会返回索引中所有的文档。
GET /_search
{}
同字符串查询一样,你可以查询一个,多个或_all索引(indices)或类型(types):
GET /index_2014*/type1,typ2/_search
{}
你可以使用from及size参数进行分页:
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请求,类似于这样:
POST /_search
{
"from" : 30,
"size" : 10
}
这个原理同样应用于其他携带交互数据的GET API请求中。
相对于神秘的查询字符串方法,请求体查询允许我们使用结构化查询Query DSL(Query Domain Specific Language)
结构化查询(Query DSL)
结构化查询是一种灵活的,多表现形式的查询语言。Elasticsearch在一个简单的JSON接口中用结构化查询来展现Lucene绝大多数能力。你应当在你的产品中采用这种方式进行查询。它使得你的查询更加灵活,精准,易于阅读并且易于debug。
使用结构化查询,你需要传递query参数:
GET /_search
{
"query" : YOUR_QUERY_HERE
}
空查询- {} -在功能上等同于使用match_all查询子句,正如其名字一样,匹配所有的文档:
GET /_search
{
"query" : {
"match_all" : {}
}
}
查询子句
一个查询子句一般使用这种结构:
{
QUERY_NAME : {
ARGUMENT : VALUE,
ARGUMENT : VALUE, ...
}
}
或指向一个指定的字段:
{
QUERY_NAME : {
FIELD_NAME : {
ARGUMENT : VALUE,
ARGUMENT : VALUE, ...
}
}
}
例如,你可以使用match查询子句用来找寻在tweet字段中找寻包含elasticsearch的成员:
{
"match" : {
"tweet" : "elasticsearch"
}
}
完整的查询请求会是这样:
GET /_search
{
"query" : {
"match" : {
"tweet" : "elasticsearch"
}
}
合并多子句
查询子句就像是搭积木一样,可以合并简单的子句为一个复杂的查询语句,比如:
- 简单子句(leaf clauses)(比如match子句)用以在将查询字符串与一个字段(或多字段)进行比较。
- 复合子句(compound)用以合并其他的子句。例如,bool子句允许你合并其他的合法子句,无论是must,must_not还是should:
复合子句能够合并任意其他查询子句,包括其他的复合子句。这就意味着复合子句可以相互嵌套,从而实现非常复杂的逻辑。
以下实例查询在inbox中或未标记spam的邮件中找出包含“business opportunity”的星标(starred)邮件:
- Elasticsearch之请求体查询(request body search)。
- Elasticsearch(十三)elasticsearch请求体查询
- ElasticSearch(七)--请求体查询
- elasticsearch源码分析之search查询(十一)
- 通过 Spring RestTemplate 调用带请求体的 Delete 方法(Delete With Request Body)
- ElasticSearch读取查询结果(search)
- elasticsearch之Search API
- [ElasticSearch]Search之分页
- request请求数据包组成:请求行(request line)消息头(header)实体内容(Body)
- 1.5.8 THE RAW REQUEST BODY(请求的主体部分)
- elasticsearch---search in depth之struct search
- elasticsearch之query-----执行Search
- elasticsearch之search-guard安装
- Elasticsearch查询之Match
- spring MVC 获取request中的body体
- 请求体方式请求elasticsearch
- ElasticSearch(五)--搜索Search
- elasticsearch---search in depth之Proximity matching
- latex 波浪线 ~
- 深度学习参数和架构设计技巧
- ubuntu下jdk安装
- myeclipse连接mysql
- struts的两种驱动
- Elasticsearch之请求体查询(request body search)。
- [NOIP2017模拟]road
- node.js的HelloWrold
- poj 2181 Jumping Cows
- C语言初步-第31讲:循环控制结构及流程图(循环的嵌套流程图)
- 输入一个一维数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
- textview点击弹出键盘的回车键,添加相应事件
- C3P0与数据库的连接与配置
- 幸运的袋子