网站首页 > 博客文章 正文
我们做es查询的时候的,如果不会经常使用,会忘记了基本的DSL语句,这里相当于做个笔记吧。
检索的数据来自
https://gitee.com/xlh_blog/common_content/blob/master/es%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE.json
1 排序
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
]
}
分页
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
],
"from": 0,
"size": 100
}
分页查询,我们用from 从那个id开始,size表示每页多少条数据
-source
source指定我们要显示的字段
GET bank/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"balance": {
"order": "desc"
}
}
],
"from": 0,
"size": 100,
"_source": ["balance","firstname"]
}
match 匹配
比如匹配account_number为20的记录 ,match如果匹配一个非字符的就是一个精确匹配,match也进行模糊匹配
GET bank/_search
{
"query": {
"match": {
"account_number": 20
}
}
}
短语匹配
短语匹配,会让整个关键字作为一个整体去匹配
GET /bank/_search
{
"query": {
"match_phrase": {
"firstname": "West"
}
}
}
multi_match 多字段匹配
用多个字段是匹配一个关键字
GET /bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["firstname","address","city"]
}
}
}
bool复合查询
复合查询用于合并多个查询条件,must必须都满足,mustnot必须都不满足
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"gender": "M"
}
},
{
"match": {
"address": "mill"
}
}
],
"must_not": [
{
"match": {
"age": "28"
}
}
],
"should": [
{"match": {
"lastname": "wallace"
}}
]
}
}
}
filter
filter是对查询条件进行过滤,但是不统计相关性得分
GET /bank/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"age": {
"gte": 20,
"lte": 30
}
}
}
]
}
}
}
term用于数值进行精准匹配,比如年龄,薪水等,但是全文匹配建议用match
GET /bank/_search
{
"query": {
"term": {
"age": {
"value": "20"
}
}
}
}
aggregations(执行聚合)
聚合提供了从数据中分组和提取数据的能力。最简单的聚合方法大致等于 SQL GROUP BY 和 SQL 聚合函数。在 Elasticsearch 中,您有执行搜索返回 hits(命中结果),并且同时返 回聚合结果,把一个响应中的所有 hits(命中结果)分隔开的能力。这是非常强大且有效的, 您可以执行查询和多个聚合,并且在一次使用中得到各自的(任何一个的)返回结果,使用 一次简洁和简化的 API 来避免网络往返。
1.搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情
GET /bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
}
}
}
2.复杂:按照年龄聚合,并且请求这些年龄段的这些人的平均薪资
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age",
"size": 10
}
},
"ageavg":{
"avg": {
"field": "age"
}
},
"balanceAvg":{
"avg": {
"field": "balance"
}
}
}
}
2.多级聚合,对聚合结果再做聚合
查出所有年龄分布,并且这些年龄段中 M 的平均薪资和 F 的平均薪资以及这个年龄 段的总体平均薪资
GET /bank/_search
{
"query": {
"match_all": {
}
},
"aggs": {
"ageAgg": {
"terms": {
"field": "age"
}
, "aggs": {
"balanceAvg": {
"avg": {
"field": "balance"
}
}
}
}
},
"size": 0
}
查出年龄分布,这些年龄段中F和M的平均薪资
GET /bank/_search
{
"query": {"match_all": {
}},
"aggs": {
"aggAgg": {
"terms": {
"field": "age",
"size": 20
},
"aggs": {
"genderAgg": {
"terms": {
"field": "gender.keyword",
"size": 10
}
, "aggs": {
"balanceAvg": {
"avg": {
"field": "balance"
}
}
}
}
}
}
}
, "size": 0
}
可以看出这里做了3层的聚合,年龄聚合,性别聚合。平均薪资的聚合
2、映射
Mapping(映射)
Mapping 是用来定义一个文档(document),以及它所包含的属性(field)是如何存储和 索引的。比如,使用 mapping 来定义:
? 哪些字符串属性应该被看做全文本属性(full text fields)。 ? 哪些属性包含数字,日期或者地理位置。
? 文档中的所有属性是否都能被索引(_all 配置)。
? 日期的格式。
? 自定义映射规则来执行动态添加属性。
2.1查询映射
GET /bank/_mapping
新版本改变
Es7 及以上移除了 type 的概念。
? 关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,
但 ES 中不是这样的。elasticsearch 是基于 Lucene 开发的搜索引擎,而 ES 中不同 type 下名称相同的 filed 最终在 Lucene 中的处理方式是一样的。
? 两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,
你必须在两个不同的 type 中定义相同的 filed 映射。否则,不同 type 中的相同字段
名称就会在处理中出现冲突的情况,导致 Lucene 处理效率下降。 ? 去掉type就是为了提高ES处理数据的效率。
Elasticsearch 7.x
? URL中的type参数为可选。比如,索引一个文档不再要求提供文档类型。 Elasticsearch 8.x
? 不再支持URL中的type参数。
解决:
1)、将索引从多类型迁移到单类型,每种类型文档一个独立索引 2)、将已存在的索引下的类型数据,全部迁移到指定位置即可。详见数据迁移.
2.2、创建索引并指定映射
PUT /my-index
2.3更新映射
对于已经存在的映射字段,我们不能更新。更新必须创建新的索引进行数据迁
2.4数据迁移
先创建出 new_twitter 的正确映射。然后使用如下方式进行数据迁移
POST _reindex {
"source": {
"index": "twitter"
}, "dest": {
"index": "new_twitter" }
}
猜你喜欢
- 2024-10-13 Elasticsearch 入门到高手的成长阶梯-索引的基本操作(1)
- 2024-10-13 黑眼圈大神程序员用5000字带你通透读懂Elasticsearch的注意事项
- 2024-10-13 面试官:Elasticsearch如何设计索引?满分答案来了
- 2024-10-13 elasticsearch索引分片扩容操作手册
- 2024-10-13 架构 - 分布式系统如何设计,看看Elasticsearch是怎么做的
- 2024-10-13 架构成长之路:分布式系统如何设计,看看Elasticsearch是怎么做的
- 2024-10-13 Elasticsearch 创建索引前必须要了解的知识,提前避坑
- 2024-10-13 Elasticsearch-Mapping(elasticsearchmappings数组类型)
- 2024-10-13 这4种Python更新Elasticsearch数据的方法你都会吗?
- 2024-10-13 Elasticsearch: Join数据类型(elasticsearch的数据结构)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)