【Elasticsearch】DSL操作相关

news2024/11/17 21:54:47

文章目录

    • DSL操作
      • 索引操作
        • 新建索引
        • 查询索引
        • 查看所有索引
        • 删除索引
      • 映射操作
        • 创建映射
        • 查看映射
        • 索引映射关联(同创建映射类似)
      • 文档操作
        • 创建文档
        • 查询指定ID文档
        • 查询所有文档
        • 全局修改文档
        • 局部修改文档
        • 删除文档
        • 条件删除
      • 数据搜索
        • 数据准备
        • 条件查询(match)
        • 多字段条件查询(multi_match)
        • 关键字精确查询(term)
        • 多关键字精确查询(terms)
        • 过滤字段(_source)
        • 组合查询(bool 与或非)
        • 范围查询(range)
        • 模糊查询(fuzzy)
        • 字段排序(sort)
        • 高亮查询(highlight)
        • 分页查询(其实序号from,单页大小size)
        • 聚合查询(aggs)
          • State 聚合
      • 索引模板
        • 创建模版
        • 查看模板
        • 验证模板是否存在
        • 创建索引
        • 删除模版

DSL操作

索引操作

ES的索引与SQL的表很类似

新建索引

PUT /my_index

查询索引

# 如果查询的索引未存在,会返回错误信息
GET my_index

查看所有索引

GET _cat/indices

这里的查询结果表示索引的状态信息,按顺序数据表示结果如下:

内容含义具体描述
yellow单点正常当前服务器健康状态:
green(集群完整) yellow(单点正常、集群不完整)
red(单点不正常)
openstatus索引打开、关闭状态
my_indexindex索引名
6KzntQINQMu5gHbFxx-GCguuid索引统一编号
1pri主分片数量
1rep副本数量
0docs.count可用文档数量
0docs.deleted文档删除状态(逻辑删除)
225bstore.size主分片和副分片整体占空间大小
225bpri.store.size主分片占空间大小

删除索引

# 如果删除一个不存在的索引,那么会返回错误信息
DELETE /my_index

映射操作

创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

创建映射

PUT /my_index/_mapping
{
    "properties": {
        "name": {
            "type": "text",
            "index": true
        },
        "sex": {
            "type": "text",
            "index": false
        },
        "age": {
            "type": "long",
            "index": false
        }
    }
}
  • 字段名:任意填写,例如name、sex、age

  • 数据类型(type)

    • String 类型,分两种
      • text:可分词
      • keyword:不可分词,数据会作为完整字段进行匹配,精准匹配的
    • Numerical:数值类型,分两类
      • 基本数据类型:long、integer、short、byte、double、float、half_float
      • 浮点数的高精度类型:scaled_float
    • Date:日期类型
    • Array:数组类型
    • Object:对象
  • 是否索引(index)

    默认true,即字段会被索引

    • true:字段会被索引,则可以用来进行搜索
    • false:字段不会被索引,不能用来搜索
  • 是否独立存储(store)

    默认为false

    原始的文本会存储在_source 里面,默认情况下其他提取出来的字段都不是独立存储的,是从_source 里面提取出来的。当然你也可以独立的存储某个字段,只要设置"store": true 即可,获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。

  • 分词器(analyzer)

    这里的 ik_max_word 即使用 ik 分词器,后面会有专门的章节学习

查看映射

GET /my_index/_mapping

索引映射关联(同创建映射类似)

PUT /my_index1
{
    "settings": {},
    "mappings": {
        "properties": {
            "name": {
                "type": "text",
                "index": true
            },
            "sex": {
                "type": "text",
                "index": false
            },
            "age": {
                "type": "long",
                "index": false
            }
        }
    }
}

文档操作

文档是 ES 软件搜索数据的最小单位, 不依赖预先定义的模式,所以可以将文档类比为表的一行JSON类型的数据。

创建文档

POST my_index/_doc
{
  "id": 1001,
  "name": "alan",
  "age": 18,
  "city": "shanghai"
}
  • my_index:上面创建好的索引

  • 多次请求,会生成不同的ID,即不是幂等性的操作,不能使用put请求。

  • POST/PUT /my_index/_doc/1:最后那个1,指定唯一性标识(ID),默认情况下,ES服务器会自动生成一个,在响应体里有体现。

  • 如果明确了数据主键,也即是指定了ID,请求方式也可以是PUT请求

查询指定ID文档

GET /my_index/_doc/1002

查询所有文档

GET /my_index/_search

全局修改文档

修改文档本质上和新增文档是一样的,如果存在就修改,如果不存在就新增

POST/PUT /my_index/_doc/1002
{
  "id": 10022,
  "name": "alan",
  "age": 19,
  "city": "shanghai"
}

局部修改文档

POST /my_index/_update/1002
{
  "doc": {
    "id": 10025
  }
}

删除文档

删除一个文档不会立即从磁盘上移除,它只是被标记成已删除(逻辑删除)。

DELETE /my_index/_doc/1002

条件删除

POST /my_index/_delete_by_query
{
  "query":{
    "match":{
      "age":18
    }
  }
}

数据搜索

数据准备

PUT student/_bulk?refresh
{"index":{"_id": "1001"}}
{"name":"zhangsan","nickname":"zhangsan","sex":"男","age":30}
{"index":{"_id": "1002"}}
{"name":"lisi","nickname":"lisi","sex":"男","age":20 }
{"index":{"_id": "1003"}}
{"name":"wangwu","nickname":"wangwu","sex":"女","age":40 }
{"index":{"_id": "1004"}}
{"name":"zhangsan1","nickname":"zhangsan1","sex":"女","age":50 }
{"index":{"_id": "1005"}}
{"name":"zhangsan2","nickname":"zhangsan2","sex":"女","age":30 }

条件查询(match)

match 匹配类型查询,会把查询条件进行分词,然后进行查询,多个词条之间是 or 的关系

# 查所有
GET /student/_search
{
 "query": {
   "match_all": {}
 }
}

# 按条件查询
GET /student/_search
{
 "query": {
   "match": {
     "name": "lisi"
   }
 },
 "_source": ["name", "age"]  # 指定查询字段,类似于SQL中的select,默认是*(查所有)
}

多字段条件查询(multi_match)

GET /student/_search
{
 "query": {
   "multi_match": {
     "query": "zhangsan",
     "fields": ["name","nickname"]
   }
 }
}

关键字精确查询(term)

GET /student/_search
{
 "query": {
   "term": {
     "name": {"value": "zhangsan"}
   }
 } 
}

多关键字精确查询(terms)

GET /student/_search
{
 "query": {
   "terms": {
     "name": ["zhangsan","lisi"]
   }
 } 
}

过滤字段(_source)

GET /student/_search
{
 "_source": {
   "includes": ["name","nickname"]
 }, 
 "query": {
   "terms": {
     "nickname": ["zhangsan"]
   }
 }
}

GET /student/_search
{
 "_source": {
   "excludes": ["name","nickname"]
 }, 
 "query": {
   "terms": {
     "nickname": ["zhangsan"]
   }
 }
}

组合查询(bool 与或非)

GET /student/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "zhangsan"
                    }
                }
            ],
            "must_not": [
                {
                    "match": {
                        "age": "40"
                    }
                }
            ],
            "should": [
                {
                    "match": {
                        "sex": "男"
                    }
                }
            ]
        }
    }
}

范围查询(range)

GET /student/_search
{
    "query": {
        "range": {
            "age": {
                "gte": 30,
                "lte": 35
            }
        }
    }
}

模糊查询(fuzzy)

编辑距离(fuzziness)范围:[0, 1, 2]

编辑距离越高,允许更多的字符更改,这意味着更多的相似词将被包含在匹配中。例如,使用模糊度为1的查询词“apple”将匹配“ale”、“aple”、“aplee”等词。

当被查的字符长度大于2时,并且还没有指定fuzziness,用默认值1.

编辑距离是将一个术语转换为另一个术语所需的一个字符更改的次数。这些更改可以包括:

  • 更改字符(box → fox)
  • 删除字符(black → lack)
  • 插入字符(sic → sick)
  • 转置两个相邻字符(act → cat)
GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": {
                "value": "zhangsan"
            }
        }
    }
}

GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": {
                "value": "zhangsan",
                "fuzziness": 0
            }
        }
    }
}

字段排序(sort)

倒序:desc,正序asc

GET /student/_search
{
    "query": {
        "fuzzy": {
            "name": "zhangsan"
        }
    },
    "sort": [
        {
            "age": {
                "order": "desc"
            }
        },
        {
            "_score": {
                "order": "asc"
            }
        }
    ]
}

高亮查询(highlight)

GET /student/_search
{
    "query": {
        "match": {
            "name": "zhangsan"
        }
    },
    "highlight": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>",
        "fields": {
            "name": {}
        }
    }
}

分页查询(其实序号from,单页大小size)

GET /student/_search
{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "age": {
                "order": "desc"
            }
        }
    ],
    "from": 0,
    "size": 2
}

聚合查询(aggs)

# 下面列举了几个常见的聚合函数,更多的自己摸索
GET /student/_search
{
    "aggs": {
        // 最大值
        "max_age": {
            "max": {
                "field": "age"
            }
        },
        // 最小值
        "min_age": {
            "min": {
                "field": "age"
            }
        },
        // 求和
        "sum_age": {
            "sum": {
               "field": "age"
           }
        },
        // 平均值
        "avg_age": {
            "avg": {
                "field": "age"
            }
        },
        // 去重后再计数
        "distinct_age": {
            "cardinality": {
                "field": "age"
            }
        }
        // topN
        "top_age_hits": {
          "top_hits": {
            "sort": [{
              "age":{
                "order": "desc"
              }
            }], 
            "_source": {
              "includes": ["name", "age"]
            }, 
            "size": 2  //这个size是控制top_hits显示的条数
          }
        }
        
    },
    "size": 0
}
State 聚合

stats关键字对某个字段一次性返回 count,max,min,avg 和 sum 五个指标

GET /student/_search
{
    "aggs": {
        "stats_age": {
            "stats": {
                "field": "age"
            }
        }
    },
    "size": 0
}

索引模板

在实际开发中,我们可能需要创建不止一个索引,但是每个索引或多或少都有一些共性。

elasticsearch 在创建索引的时候,就引入了模板的概念,你可以先设置一些通用的模板,在创建索引的时候,elasticsearch 会先根据你创建的模板对索引进行设置。

创建模版

PUT _template/mytemplate
{
    "index_patterns": [
        "my*"
    ],
    "settings": {
        "index": {
            "number_of_shards": "1"
        }
    },
    "mappings": {
        "properties": {
            "now": {
                "type": "date",
                "format": "yyyy/MM/dd"
            }
        }
    }
}

查看模板

GET /_template/mytemplate

验证模板是否存在

HEAD /_template/mytemplate

创建索引

PUT testindex -> 不符合index_patterns的规则,不生效

PUT mytest -> 符合规则,生效

删除模版

DELETE /_template/mytemplate

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/485800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware 虚拟机中 Linux 系统Centos7磁盘空间扩容(亲测)

1.修改虚拟机磁盘容量 例如之前虚拟机磁盘空间为30G&#xff0c;现要将磁盘容量设置为50G 打开虚拟机&#xff08;必须处于关机状态&#xff09;&#xff0c;点击【编辑虚拟机设置】&#xff0c;然后点击【磁盘】&#xff0c;接着点击【扩展】&#xff0c;输入修改后的最大磁盘…

LangChain入门(二)-通过 Google 搜索并返回答案

GitHub - liaokongVFX/LangChain-Chinese-Getting-Started-Guide: LangChain 的中文入门教程LangChain 的中文入门教程. Contribute to liaokongVFX/LangChain-Chinese-Getting-Started-Guide development by creating an account on GitHub.https://github.com/liaokongVFX/La…

js实现继承属性和方法

js实现继承属性和方法 1 使用extends实现继承2 原型链继承3 组合继承4 寄生组合继承5 实例继承6 拷贝继承7 扩展7.1 函数中方法定义在函数内部、函数外、prototype上的区别7.2 class创建实例与构造函数创建实例 首先定义一个父类 function Animal (name, age) {this.name nam…

Java Web案例:实现用户登录功能

文章目录 零、本节学习目标一、纯JSP方式实现用户登录功能&#xff08;一&#xff09;实现思路&#xff08;二&#xff09;实现步骤1、创建Web项目2、创建登录页面3、创建登录处理页面4、创建登录成功页面5、创建登录失败页面6、编辑项目首页 &#xff08;三&#xff09;测试结…

【JavaEE】CSS基础知识

文章目录 1.CSS概念1.1CSS是干啥的&#xff1f;1.2基础语法规范1.2基础语法规范1.3引入格式✨内部样式表✨行内样式表✨外部样式&#xff08;最常用的样式&#xff09; 1.4代码风格✨样式格式✨样式大小写 2.选择器2.1选择器的功能2.2基础选择器有哪些&#xff1f;&#x1f6e0…

GPT 告诉你请求到达 Tomcat 是怎么处理的

tomcat如何监听请求到达 没有SpringMVC,tomcat 如何处理请求 Tomcat 线程池的作用是什么 如何配置tomcat 线程池 tomcat 线程池的主要任务是处理连接请求 tomcat线程池是怎么实现的 到这里可以看出来&#xff0c;tomcat线程池的实现方式也是通过ThreadPoolExecutor 实现 如何根…

Git 使用教程整理

一、配置Git 编码为utf-8 设置登陆账号 使用Git GUI操作 二、获取远程仓库代码 推荐使用使用 git bash 命令&#xff1a;git clone xxx git clone https://github.com/jeromeetienne/jquery-qrcode.git 其他参考&#xff1a;使用Git获取最新版本到本地_gitgui 获取新版本_天…

【Java开发】Spring Cloud 11 :Gateway 配置 ssl 证书(https、http 访问)

最近研究给微服务项目配置 ssl 证书&#xff0c;如此才可以对接微信小程序&#xff08;需要使用 https 请求&#xff09;。传统单体项目来说&#xff0c;首先往项目中添加证书文件&#xff0c;然后在配置文件中配置 ssl 证书路径、密码等相关信息&#xff1b;那么微服务这么多项…

高性能定时器--时间轮/多级时间轮

运行原理 指针指向轮子上的一个槽&#xff0c;轮子以恒定的速度顺时针转动&#xff0c;每转动一步就指向下一个槽&#xff08;虚线指针指向的槽&#xff09;&#xff0c;每次转动称为一个tick&#xff0c;一个tick的时间称为时间轮的槽间隔slot interval&#xff0c;即心搏时间…

3。数据结构(2)

嵌入式软件开发第三部分&#xff0c;各类常用的数据结构及扩展&#xff0c;良好的数据结构选择是保证程序稳定运行的关键&#xff0c;&#xff08;1&#xff09;部分包括数组&#xff0c;链表&#xff0c;栈&#xff0c;队列。&#xff08;2&#xff09;部分包括树&#xff0c;…

JavaWeb_Web前端_Element组件库

JavaWeb_Web前端_Element组件库 快速入门安装ElementUI组件库引入ElementUI组件库添加组件并导入到根组件添加组件导入到根组件 Table 表格Pagination 分页Dialog对话框表单 案例Vue路由Vue类DeptView.vue动态视图组件请求链接组件 打包和部署打包打包按钮打包文件 部署部署静态…

OpenAI文本生成器-OpenAI文本生成器

openai自动批量写文章 如果您正在寻找一个能够自动生成高质量文章的工具&#xff0c;OpenAI 写文章就是您需要的推广神器。 OpenAI 写文章基于 OpenAI 最先进的语言模型技术&#xff0c;可以使用自然语言生成技术自动创作文章。只需在平台上提供少量的关键词或概念&#xff0…

Python每日一练:最长递增区间狄杰斯特拉(80分)K树(0分)

文章目录 前言一、最长递增区间二、狄杰斯特拉&#xff08;80&#xff09;三、K树&#xff08;0&#xff09;总结 前言 很显然&#xff0c;Python的受众远远大于C&#xff0c;其实笔者本人对Python的理解也是远强于C的&#xff0c;C纯粹是为了假装笔者是个职业选手才随便玩玩的…

java基础入门-04

Java基础入门-04 11、集合&学生管理系统11.1.ArrayList集合和数组的优势对比&#xff1a;11.1.1 ArrayList类概述11.1.2 ArrayList类常用方法11.1.2.1 构造方法11.1.2.2 成员方法11.1.2.3 示例代码 11.1.3 ArrayList存储字符串并遍历11.1.3.1 案例需求11.1.3.2 代码实现 11…

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计(1)

基于野火F407骄阳开发板的苹果采摘机器人机械臂的采摘轨迹与夹持器的采摘动作的设计&#xff08;1&#xff09; 苹果采摘机器人1、采摘流程与硬件设计2、机械臂驱动以及采摘轨迹设计2.1、台达A2电机驱动实现2.2、机械臂寻找苹果巡逻轨迹 苹果采摘机器人 1、采摘流程与硬件设计…

fio 使用碰到的坑,一些不常用,但可能用到的参数(校验 跳跃 多线程)

1&#xff0c; 祼盘读写 一个分区 -filename/dev/sdb1 同时测试多个分区 -filename/dev/sdb1;/dev/sdb2 比例&#xff1a; fio -filename/dev/sdb1 -direct1 -iodepth 1 -thread -rwrandread -ioenginepsync -bs4k -size50G -numjobs10 -runtime1000 -group_reporting -nam…

es6的语法糖,展开运算符,类的实现

1.0 ES6语法糖 [重点] 1.1数组的解构赋值 // 声明多个变量 let [a,b,c] [1,2,3] ​ let a1&#xff0c;b2&#xff1b; // 交换数值 [a,b] [b,a] ​2 1.12 函数的参数结构 1.2对象的解构 对象存在键值对&#xff0c;如果需要解构对象&#xff0c;你需要使用对象的键名为变量…

Flask 知识点整理

文章目录 1.URL与视图的映射带参数的url&#xff1a;将参数固定到了path中查询字符串的方式传参 2.模板渲染给html文件传参 3.模板访问对象属性User 是个类User是个字典 4.过滤器的使用通过一个 | 管道符进行过滤自定义过滤器 5.控制语句iffor 1.URL与视图的映射 带参数的url&…

IIC总线简介

IIC总线 IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线 主要用于近距离、低速的芯片之间的通信&#xff1b;IIC总线有两根双向的信号线一根数据线SDA用于收发数据&#xff0c;一根时钟线SCL用于通信双方时钟的同步&#xff1b;IIC总线硬件结构简单&#xff0c;成…

第9章 项目成本管理

文章目录 9.1.1 成本与成本管理概念 329项目成本管理的过程 9.1.2 相关术语 331成本的类型&#xff08;6种&#xff09;应急储备与管理储备 9.2.3 项目成本管理计划制订的 输出 3349.3.1 项目成本估算的主要相关因素 335项目估算还需要考虑但 容易被忽视的 主要因素 9.3.2 项目…