Elastic Search权威指南 第五章 结构化查询
来源:互联网 发布:步态分析数据 编辑:程序博客网 时间:2024/05/19 17:47
1. 请求体查询
最重要的意义:请求体查询允许我们使用结构化语言查询。
1.1 请求体查询出现的原因
简单查询语句是一种高效的查询语句,但是查出来的数据不够详细和具体,应该使用能够查询出更多内容的查询方式,请求体查询就是这样的查询。
1.2 空查询
GET /_seearch{}将会返回索引中的所有文档甚至可以查询多个索引或者类型GET /index_*/_searchGET /index_*/type1,type2...,typen/_search支持分页操作GET /_search{ "from":30, "size":10}
2. 结构化查询
2.1 何为结构化查询
官方解释:
结构化查询是一种灵活的、多表现形式的查询语言。
我的理解:
就是一种以json为格式的查询语言,因为json语言结构的严谨性,使得查询语言看起来更加的易读且拥有丰富变换的查询格式。
2.2 结构化查询语法
{ QUERY_NAME: { FIELD_NAME: { ARGUMENT: VALUE, ARGUMENT: VALUE,... } }}QUERY_NAME一般是"query"FIELD_NAME一般是执行的操作名称,我更喜欢标识为ACTION_NAME 比如"match"ARGUMENT一般是列名VALUE一般是值
举个栗子
GET /_search{ "query":{ "match":{ "tweet":"wushuangxiaoyu" } }}意义为查询所有索引及类型中,tweet字段中包含wushuangxiaoyu这个字符串的记录
2.3 查询和过滤
区别的自己理解:
过滤匹配的是确切值
查询,比较的是相关性
性能之间的区别:
过滤的结果会进行缓存
查询的结果不会进行缓存,而且要挨个匹配相关所有文档的相关性,所以查询语句更加耗时
综合考虑之:
过滤语句的目的(因为会对结果集进行缓存,方便查询语句进行相关性比较),就是缩小查询语句比较相关性的范围,提高查询语句的效率。
使用场景:
进行全文搜索或者进行相关性比较的时候使用查询
其余的情况都是使用过滤
2.4 重要且常用的查询过滤语句
term 过滤
主要用于匹配精确值,比如bool,number,date,以及not_analyzed的字符串{ "term":{ "age":12 }}{ "term":{ "time":"2017-8-8" }}
terms过滤
{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}
range过滤
{ "range":{ "age":{ "lt":30, "gte":20 } }}gt :: 大于gte :: 大于等于lt :: 小于lte :: 小于等于
exits和missing过滤
{ "exists": { "field": "title" }}
bool过滤
用来合并多个过滤查询的布尔逻辑
{ "bool": { "must": { "term": { "folder": "inbox" }}, "must_not": { "term": { "tag": "spam" }}, "should": [ { "term": { "starred": true }}, { "term": { "unread": true }} ] }}must:andshould:ormust_not:not
2.5 查询语句
multi_macth查询
就是一次性可以检索多个字段
"multi_macth":{ "title":"abcd", "name":"jack"}
bool查询
与bool过滤的区别:
bool过滤会直接给出是否匹配成功的结果,但是bool查询会比较相关性
must :: 查询指定文档一定要被包含。must_not :: 查询指定文档一定不要被包含。should :: 查询指定文档, 有则可以为文档相关性加分。
3. 过滤查询
一条语句中既包含过滤,同时也包含查询
例如:
查询:"query":{ "match":{ "email":"business opportunity" }}过滤:"filter":{ "term":{ "folder":"inbox" }}合并:"filtered":{ "query":{ "match":{ "email":"business opportunity" } }, "filter":{ "term":{ "folder":"inbox" } }}结构化:GET /_search{ "query":{ "filtered":{ "query":{ "match":{ "email":"business opportunity" } }, "filter":{ "term":{ "folder":"inbox" } } } } }这样子就完成了过滤查询的合并
4. 验证查询
如何验证一个ES查询语句是否合法呢
GET /_index/_type/_validate/query?explain{ 查询语句}如果是错的,加上?explain关键字后还可以看到详细的错误信息举个例子:一个正确的返回信息GET /_validate/query?explain{ "query": { "match" : { "tweet" : "really powerful" } }}{ "valid" : true, "_shards" : { ... }, "explanations" : [ { "index" : "us", "valid" : true, "explanation" : "tweet:really tweet:powerful" }, { "index" : "gb", "valid" : true, "explanation" : "tweet:really tweet:power" } ]}可以分析出来,"really powerful"这个词组,在索引"us"中被分成了"really"和"powerful",在索引"gb"中被分成了"really"和"power",因为"gb"索引使用的是english分析器。
阅读全文
1 0
- Elastic Search权威指南 第五章 结构化查询
- Elastic Search权威指南 第三章 搜索
- Elastic Search权威指南 第四章 映射与分析
- Elastic Search权威指南 第七章 分布式搜索
- Elastic Search权威指南 第二章 分布式文档存储的过程
- Elastic Search权威指南 第一章 ES基础概念
- Elastic Search 查询基础
- Hadoop权威指南第五章
- elastic search 多条件查询
- hadoop权威指南第五章问题总结
- 初窥javaScrit权威指南,第五章语句
- [elastic search](2-1)深入搜索之结构化搜索
- JavaScript权威指南 第二章 词法结构
- Elastic search问题笔记: scroll查询数据
- Squid中文权威指南 第五章(运行Squid)
- Asterisk权威指南/第五章 用户设备配置
- 读《javascript权威指南> 》第五版 第八章 函数
- 《Android编程权威指南》第二版 第五章 挑战练习
- hdu 6158 The Designer
- 使用URLConnection实现post表单提交
- Web网页实现计算器功能
- HDU 4937Lucky Number
- u-boot移植--3、DM9000网卡移植
- Elastic Search权威指南 第五章 结构化查询
- 不要62
- 设计模式之装饰者模式
- Oracle之使用proc查询多行数据
- opencv中findContours 和drawContours画图函数
- Elastic Search权威指南 第七章 分布式搜索
- ReentrantLock的lock-unlock流程详解
- Java设计模式之迭代器模式
- 老罗:我的奋斗