ElasticSearch之QueryDSL查询语法
目录
创建索引:
插入测试数据
QueryDSL用法
查询所有
排序
查询n条数据
分页查询
查询结果返回指定列
关键字term查询
范围查询(range)
前缀查询(prefix)
通配符查询(wildcard)
根据多个id查询
模糊查询(fuzzy)
高亮查询
自定义高亮标签
创建索引:
请求头
put 192.168.0.101:9200/log_index/请求体:{"mappings":{"log_type":{"properties":{"name":{"type":"keyword"},"age":{"type":"integer"},"birthday":{"type": "date"}}}}
}
插入测试数据
请求头
PUT 192.168.0.101:9200/log_index/log_type/_bulk请求体:{"index":{}}{"name":"小黑","age":23,"birthday":"2012-12-12"}{"index":{}}{"name":"王小黑","age":24,"birthday":"2012-12-13"}{"index":{}}{"name":"张小五","age":8,"birthday":"2012-12-14"}{"index":{}}{"name":"win7","age":9,"birthday":"2012-12-15"}{"index":{}}{"name":"梅超风","age":43,"birthday":"2012-12-16"}{"index":{}}{"name":"张无忌","age":59,"birthday":"2012-12-17"}
QueryDSL用法
查询所有
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"match_all":{}}}
注:match_all 而不是match-all中间是下划线
排序
说明:多字段排序,先按照出生日期降序排列,如果出生日期相同则按照年龄排序
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"match_all":{}},"sort":{"birthday":"desc","age":"asc"}}
或者
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"match_all":{ }},"sort": [{"birthday":{"order":"desc" }},{"age":{"order":"asc"}}]
}
两种写法结果一样
查询n条数据
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"match_all":{ } },"size":2,"sort": [{"birthday":{"order":"desc" }},{"age":{"order":"asc"}}]
}
注意:size的位置适合query关键字并列,而不是在query关键字内部
分页查询
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"match_all":{ } },"size":2,"from":1,"sort": [{"birthday":{"order":"desc" }},{"age":{"order":"asc"}}]
}
同理:from和size是并列的,from表示从第几页查询,size表示每页几条数据
查询结果返回指定列
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"match_all":{ } },"size":2,"from":1,"_source":["name","age"]}
注:关键字_source表示要显示的指定列,且指定列以数组的形式表现
关键字term查询
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"term":{"name":"梅超风"}},"_source":["name","age"]
}或者请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"term":{"name":{"value":"梅超风"}}},"_source":["name","age"]
}
注:使用term关键字查询是特别需要注意text类型和keywordl类型的字段
NOTE1: 通过使用term查询得知ES中默认使用分词器为标准分词器(StandardAnalyzer),标准分词器对于英文单词分词,对于中文单字分词
NOTE2: 通过使用term查询得知,在ES的Mapping Type 中 keyword , date ,integer, long , double , boolean or ip 这些类型不分词**,**只有text类型分词
范围查询(range)
说明:查询年龄大于等于33小于等于35岁的文档数据
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"range":{"age":{"gte":33,"lte":35}}},"_source":["name","age"]
}
注:其中gte表示大于等于,lte表示小于等于,gt表示大于,lt表示小于
注:关键字range在query内部,而查询的关键字在range内部
前缀查询(prefix)
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"prefix":{"name":{"value":"梅超"}}},"_source":["name","age"]
}
注:这里和term关键字有所区别,我的name字段类型是keyword(keyword默认是不分词),如果是term查询结果则是无数据,而使用perfix查询时则表示查询name是“梅超”前缀的修饰的文档数据。
通配符查询(wildcard)
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"wildcard":{"name":{"value":"梅*"}}},"_source":["name","age"]
}
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"wildcard":{"name":{"value":"梅?"}}},"_source":["name","age"]
}
注:*表示可以匹配一个或多个字符,而?只能匹配零个或一个,同时通配符要放到索引词的后面
根据多个id查询
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"ids":{"values":["AXnciHtbCxsROukG0JQu","AXnciHtbCxsROukG0JQv"]}},"_source":["name","age"]
}
注:这里ids和values都是关键字(千万不要写成id或value!!!!),且values的值是数组的形式展现
模糊查询(fuzzy)
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"fuzzy":{"name":{"value":"梅花风"}}},"_source":["name","age"]
}
注:fuzzy 模糊查询 最大模糊错误 必须在0-2之间
# 搜索关键词长度为 2 不允许存在模糊 0
# 搜索关键词长度为3-5 允许一次模糊 0 1
# 搜索关键词长度大于5 允许最大2模糊
如上梅超风三个字,则允许出现一个错误(官方文档这样定义的),因此查询梅花风也是能查询到数据的
bool查询
说明: 用来组合多个条件实现复杂查询
> **must: 相当于&& 同时成立**
> **should: 相当于|| 成立一个就行**
> **must_not: 相当于! 不能满足任何一个**
说明:查询年龄大于等于33小于等于35并且名称是小黑1的文档信息
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"bool":{"must":[{ "term":{"name":{"value":"小黑1"}}} ,{"range":{"age":{"gte":33,"lte":35}}}]}},"_source":["name","age"]
}
注意的是多个条件查询是比如must后面则是数组格式(内部是json格式的对象),而单个条件查询时则是json对象如下图
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:{"query":{"bool":{"must": {"range":{"age":{"gte":33,"lte":35}}}}},"_source":["name","age"]
}
高亮查询
说明:关键字梅超风,所有字段含有梅超风的文档数据都高亮显示
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"bool":{"must": {"term":{"name":{"value":"梅超风"}}}}},"highlight":{"fields":{"*":{}}},"_source":["name","age"]
}
自定义高亮标签
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体:
{"query":{"bool":{"must": {"term":{"name":{"value":"梅超风"}}}}},"highlight":{"pre_tags": ["<span style='color:red'>"],"post_tags": ["</span>"],"fields":{"*":{}}},"_source":["name","age"]
}
多字段查询
说明:在desc和content字段中查询名称是北京的文档数据(这里的desc,content都是text类型,name是keyword类型)。
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体
{"query":{"multi_match":{"query": "北京","fields":["desc","content"]}},"_source":["name","age","desc","content"]
}请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体{"query":{"multi_match":{"query": "北京","fields":["desc","content","name"]}},"_source":["name","age","desc","content"]
}
1.多字段查询时需要注意字段类型,这里的age定义的是integer类型因此这样查询报错
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体
{"query":{"multi_match":{"query": "北京","fields":["desc","content","name","age"]}},"_source":["name","age","desc","content"]
}
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体{"query":{"multi_match":{"query": "北京欢迎","fields":["desc","content","name"]}},"_source":["name","age","desc","content"]
}
注:如果对搜索的字段分词(即搜索的字段是text),则对query先分词在搜索,如果对搜索的字段不分词则直接使用query整体进行搜索。
多字段分词查询
请求头:
GET 192.168.0.101:9200/log_index/log_type/_search请求体
{"query":{"query_string":{"query": "北京","fields":["desc","content","name"]}},"_source":["name","age","desc","content"]
}
ElasticSearch之QueryDSL查询语法相关推荐
- ElasticSearch 高级查询语法
ElasticSearch 高级查询语法Query DSL ES倒排索引 ES高级查询Query DSL 查询所有 match_all 分页查询form 深分页查询Scroll 指定字段排序sort ...
- ElasticSearch查询语法
一.查询关键字 1.terms.term查询 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 GET te ...
- lucene查询语法,适用于ELk:kibana查询
lucene查询语法,适用于ELk:kibana查询 Kibana在ELK中扮演着数据可视化角色,用来查询及展示数据: Elasticsearch查询采用的是luncene搜索引擎,其4过滤查询语法和 ...
- 03.elasticsearch pipeline aggregation查询
文章目录 1. pipeline aggregation查询语法 1. 符号代表 2. 聚合层级 2. pipeline aggregation 查询类型概览 1. sibling aggregati ...
- Grafana教程(prometheus 基本查询语法,alerting报警)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 prometheus原理可以参考:https://blog.csdn.net/luanpeng825485697/article/details/82 ...
- Kubernetes-基于EFK进行统一的日志管理原理(kibana查询语法)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 EFK安装部署参考:https://blog.csdn.net/luanpeng825485697/article/details/83312662 ...
- ES(Elasticsearch)基本查询总结(含docker安装,python操作)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 官网:https://www.elastic.co/guide/index.html 搜索语法:https://www.elastic.co/guid ...
- 第三章 Elasticsearch Query DSL -- 查询
第三章 Elasticsearch Query DSL -- 查询 摘要 查询和过滤的上下文(context) 相关性得分 查询上下文 过滤上下文 示例(下面这些查询参数,后续会详述) 全文查询 in ...
- 【ES知识】ES基础查询语法一览
大家好,我是老坛. 更多优质文章资源请关注同名公众号:老坛聊开发 Elasticsearch是一个分布式的RESTful 风格的搜索和数据分析引擎,它使用方便,查询速度快,因此也被越来越多的开发人员使 ...
- ElasticSearch 文档检索、查询建议、数据聚合
目录 结构化搜索 term 单词匹配(单个值) terms 单词匹配(多个值) range 范围查询 exists 存在查询.miss 缺失查询 ids id匹配 prefix 前缀匹配 wildca ...
最新文章
- 上传jar包到nexus
- idea java 非web程序打包
- 关于Redis的数据迁移(三种方法)
- php mysql update 返回_php mysql_query增删改查(update delete insert)返回值类型
- qtextedit 默认文案_QT中常用的控件说明.md
- git commit Please tell me who you are it config --global user.email you@example.com
- POJ 2483 Cows(树状数组)
- 再生希尔伯特空间_向量、函数向量、再生核希尔伯特空间、核技巧
- php urldecode 加号不显示_php|urldecode urlencode 的加号问题
- Perceptual Losses for Real-Time Style Transfer and Super-Resolution
- 如何编写银行转账的测试用例,可以来看这里.....
- 灵悟礼品网上专卖店Sprint计划
- 犀牛系统连接服务器失败,犀牛5.0安装运行失败,Rhino安装失败解决方法
- .Net语言的APP开发平台Smobiler3.2版本将于八月中旬发布!——3.2版本预告(二)
- CSDN里的文章去广告、打印成PDF__小胡亲测
- DispatcherServlet详细分析
- 笔记本连接RK61键机械键盘非损坏的win和alt对调,数字键失灵以及特殊字母键失灵恢复
- 投资黄金,当然选贸易场行员平台真宝金业,安全有保障,返佣高,平仓返。
- ios11对比android8.0,谁的设计更好?iOS11正式版多图详尽对比安卓8.0
- 走近棒球运动·台湾棒球历程·MLB棒球创造营