ES学习笔记

news2024/11/15 9:13:29

01:REST

        指的是客户端和服务器之间的交互在请求之间是无状态的,从客户端到服务器的每个请求都必须包含理解请求所必须的信息,同时在请求之间的任意间隔时间点,若服务器重启,那么客户端是得不到相应的通知的.所以无状态的请求可以由任何可用的服务器回答.

        在REST样式的Web服务中,每个资源都有一个地址,资源本身都是用过方法调用的目标,这些方法都是标准方法: PUT,GET,POST.

        理解就是想要对互联网上的资源进行操作,就必须向资源所在的服务器发出请求,请求体重必须包含资源的网络路径,以及对资源进行的操作.

02倒排索引

下图为正排(索引对应着文本内容)

 

  下图为倒排(以文本内容为key,id为内容)

 03和mysql对应关系

        es是面向文档的数据库,一条数据在这里就是一个文档,下面给出对应关系:

         es里的index可以看成一个数据库,type看成数据表(逐渐被弱化7.x版本后已被删除),documents相当于行.

04索引常用命令

        1.put命令用于向es服务器发出添加索引的请求:若重复添加想用的索引,会报错

                eg:http://192.168.41.131:9200/shopping  向虚拟机中的服务器添加shopping索引

        2.索引查询:

                2.1查询所有的索引

                        http://192.168.41.131:9200/_cat/indices?v  

                        其中_cat表示查看的意思, indices表示索引

        

                         

 

                2.2单个索引查询:

                               http://192.168.41.131:9200/shopping   也就是在后面加上索引名字

                

        3.删除索引  就是将发送的方式改为delete即可.

                        http://192.168.41.131:9200/shopping  

                

05文档创建 

        文档可以类比为关系型 数据库中的表数据,添加数据的格式为json.使用postman发送数据,注意post设置如下

         注意这里的数据创建时没有指定唯一数据标识,默认情况下,es服务器会自动生成一个随机标识(id),手动指定需要在创建时指定 :格式如下

        

{
    "_index": "shopping", //索引
    "_type": "_doc",//类型-文档
    "_id": "1",//id
    "_version": 1,//版本
    "result": "created",//结果(created表示创建成功)
    "_shards": {
        "total": 2,//分片-总数
        "successful": 1,//分片总数
        "failed": 0
    },
    "_seq_no": 1,
    "_primary_term": 1
}

 06 主键查询,全查询

        查询文档,需要指明文档的唯一性标识, 使用GET方法,类似如下

                http://192.168.41.131:9200/shopping/_doc/1

        如果查不到,会返回false

        查询索引下所有的数据,在索引后加上_search

                

 返回数据的格式如下

{
    "took": 67,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "shopping",
                "_type": "_doc",
                "_id": "XH29l4QBMiCocBhl0HVo",
                "_score": 1.0,
                "_source": {
                    "title": "小米手机",
                    "category": "小米",
                    "images": "http://www.gulixueyuan.com/xm.jpg",
                    "price": 3999.00
                }
            },
            {
                "_index": "shopping",
                "_type": "_doc",
                "_id": "1",
                "_score": 1.0,
                "_source": {
                    "title": "小米手机",
                    "category": "小米",
                    "images": "http://www.gulixueyuan.com/xm.jpg",
                    "price": 3999.00
                }
            }
        ]
    }
}

  07修改

        全量修改:

                如果请求的url相同,那么输入不同的内容(请求体发生变化)会导致原有的数据被覆盖

        

             局部修改:

                        将index后面添加_update,然后跟上doc的id,同样以post的形式发送,那么可以得到局部修改后的数据.注意在json中,添加了"doc"用来说明要修改的是个文档

 08删除

            删除时逻辑删除,不是物理删除,在删除后,他不会从磁盘立即移除.

            

 09条件查询

        1.可以使用url拼接的方式,但是不安全

                

        2.使用json请求体查询(使用get方式)

                  

        3.查询全部文档内容

         4.查询指定字段,注意json格式,添加了一个"_source"字段,且,位于query外侧   

         5.分页查询

        from指定查询的起始位置,size表示从起始位置开始的文档数量.如果搜索size大于10000,需要设置index.max_result_window参数 ,默认为10000。

         6.指定数据的排序,按照price降序排序

         7.多条件查询 也就是说多加几个math选项,同时注意添加了"must"字段(相当于数据库的&&字段),同时注意must后面加的是[],不是{}

        

 

         如果想要表示"或" 那么使用should字段,注意filter和bool的包含关系,要把filter放到bool的括号里!!!!!   gt表示大于

 10全文检索,完全匹配,高亮查询

        1.全文检索:类似搜索引擎,比如输入"小华"那么会返回品牌带有小和华任意一个字的所有标识,在本例中,显然是,小米和华为两个品牌.

        

         2.完全匹配  将match换成 match_phrase 此时会非常严格的执行匹配,一旦不匹配会返回空.当然也可以有个调节因子,slop 表示少匹配slop个元素也可以 

        

         3.高亮查询,就是增加个highlight模块

        

 

 11.聚合查询

        关键字:aggs,terms,聚合查询允许使用者对文档进行统计分析,类似于group by函数,当然还有其他许多聚合,比如最大值max,平均值avg.

        带原始数据的聚合请求:  

         如果不想带原始数据,那么,可以在args外指定一个size参数, size = 0

         返回结果不包括其他条目,只有prices这一项

         求平均值: 将上一步中的terms换成使用avg即可.

        

 12映射关系

        在建立 了索引之后就等于有了数据库中的database,然后我们需要创建写字段,也就是所谓的索引库映射工作,类似于关系型数据库的表结构.(建表过程).

        映射:创建数据库的表字段需要的名称,类型,长度,约束等

        1.新建一个索引库 user ,注意body不要带东西!

        2.创建映射:插入三个属性       

        3.添加数据

         

      4.查询包含小的数据,注意url后面接的是_search

 

es数据类型(基本类型):

                1.字符串类型:

                        1.text 会被分词的数据,

                        2.keyword 不会分词的字符串,可以设置是否需要存储 "index":"true|false"

                2.数字类型:

                        

                 3.Json没有日期类型,所以日期可以是

                          包含格式化日期的字符串,"2018-10-01"或者"2018/10/01 12:11:44"

                           代表时间毫秒数的长整型数字

                           代表时间秒数的整数 

                4.范围类型-range

                                    

         es数据类型(复杂数据类型):

                1.数组类型:array 

                        es中没有专门的数组类型,所以使用[]定义即可.注意数组中的数据类型必须为同一类                                   型,不可以跨类型构建数组.

                        动态添加数组的时候第一个加入数组的数据类型决定了整个数组的数据类型

                        数组可以包含null值,空数组会被当做missing field 没有值的字段

                        给出一些示例:

① 字符串数组: ["one", "two"];
② 整数数组: [1, 2];
③ 由数组组成的数组: [1, [2, 3]], 等价于[1, 2, 3];
④ 对象数组: [{"name": "Tom", "age": 20}, {"name": "Jerry", "age": 18}].

               2.对象类型:object

                        json文档是分层的,文档可以包含内部对象,内部对象也可以进一步包含内部对象

                        添加示例,存储方式以及文档的映射结构如下

PUT employee/developer/1
{
    "name": "ma_shoufeng",
    "address": {
        "region": "China",
        "location": {"province": "GuangDong", "city": "GuangZhou"}
    }
}
{
    "name":                       "ma_shoufeng",
    "address.region":             "China",
    "address.location.province":  "GuangDong", 
    "address.location.city":      "GuangZhou"
}

文档的映射结构:

PUT employee
{
    "mappings": {
        "developer": {
            "properties": {
                "name": { "type": "text", "index": "true" }, 
                "address": {
                    "properties": {
                        "region": { "type": "keyword", "index": "true" },
                        "location": {
                            "properties": {
                                "province": { "type": "keyword", "index": "true" },
                                "city": { "type": "keyword", "index": "true" }
                            }
                        }
                    }
                }
            }
        }
    }
}

                3.嵌套类型:nested

                        嵌套类型是对象数据类型的一个特例,可以让array类型的对象被独立索引和搜索.   嵌套对象实质是将每个对象分离出来, 作为隐藏文档进行索引.    

         创建映射:

PUT game_of_thrones
{
    "mappings": {
        "role": {
            "properties": {
                "performer": {"type": "nested" }
            }
        }
    }
}

        添加数据:

PUT game_of_thrones/role/1
{
    "group" : "stark",
    "performer" : [
        {"first": "John", "last": "Snow"},
        {"first": "Sansa", "last": "Stark"}
    ]
}

        检索数据

GET game_of_thrones/_search
{
    "query": {
        "nested": {
            "path": "performer",
            "query": {
                "bool": {
                    "must": [
                        { "match": { "performer.first": "John" }},
                        { "match": { "performer.last":  "Snow" }} 
                    ]
                }
            }, 
            "inner_hits": {
                "highlight": {
                    "fields": {"performer.first": {}}
                }
            }
        }
    }
}

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

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

相关文章

LeetCode 42.接雨水

这篇记录一下刷接雨水这道题的过程,日后回顾 目录 法1: 法2: 法3: 法4: 法5: 务必掌握123 写这道题要知道雨水怎么算。核心就是要算当前列雨水的高度就要取决于这列左右两侧比自己搞得柱子中较矮的那…

【26-业务开发-基础业务-品牌管理-图片管理-上传图片功能实现-基于阿里云OSS服务-解决跨域问题-设置跨域规则-修改ACL权限为公共读】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

springmvc源码之Web上下文初始化

系列文章目录 springmvc源码之Web上下文初始化 文章目录系列文章目录Web上下文初始化ContextLoaderListenerinitWebApplicationContext初始化创建WebApplicationContext上下文Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的,springmvc中的web上…

公众号免费查题

公众号免费查题 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 题库:题库后台(点击跳转) 题…

Flink概念及应用场景

1、Flink实时应用场景 Flink在实时计算领域内的主要应用场景主要分为四类: 实时数据同步流式ETL实时数据分析复杂事件处理2、实时数据体系架构 实时数据体现大致分为三类场景: 流量类业务类特征类在数据模型上,流量类是扁平化的宽表&…

论文管理系统(用户列表显示功能)

上次我们已经实现了论文管理系登录功能,这次我们要实现登录之后的跳转到首页,并且让首页列表显示出数据库的信息并在Mapper中写入模糊查询功能语句,这次我们不使用MybatisPlus写这个功能,这次使用Mybatis来写,区别就是Plus是继承于<BaseDAO>Mapper,而Mybatis则是我们通过…

JAVASE(复习)——static

static 关键字是静态的意思,是Java中的一个修饰符,可以修饰成员方法,成员变量 一、被static修饰的特点 被类的所有对象共享&#xff08;在堆内存共享&#xff09; 随着类的加载而加载&#xff0c;优先于对象存在&#xff08;就是你加载类的时候就加载了&#xff09; 可以通过…

@Transactional注解为何会失效

使用 Transactional 注解能保证方法内多个数据库操作要么同时成功、要么同时失败。但是有很多细节需要注意&#xff0c;不然Transactional可能会失效。 1.注解应用在非 public 的方法上 如果Transactional注解应用在非public 修饰的方法上&#xff0c;Transactional将会失效。…

FLink源码 1.13 3 种 命令客户端 Generic CLI 、 yarn-cluster、DefaultCLI使用

先说结论:对于三种Cli,Generic CLI mode、yarn-cluster mode、default mode,无法同时使用,源码使用顺序为Generic CLI mode优先判断,接着是 yarn-cluster mode ,最后是default mode,所以对于三种Cli的参数,不能混用,否则会出现命令不生效的情况,具体使用以及源码见下…

【滤波跟踪】基于matlab扩展卡尔曼滤波的无人机路径跟踪【含Matlab源码 2236期】

⛄一、EKF算法简介 扩展卡尔曼滤波是利用泰勒级数展开方法将非线性滤波问题转化成近似的线性滤波问题,利用线性滤波的理论求解非线性滤波问题的次优滤波算法。其系统的状态方程和量测方程分别如式(1)、式(2)所示: 式中,X(k)为n维的随机状态向量序列,Z(k)为n维的随机量测向量序…

Matlab 对连续时间信号的运算

Matlab 对连续时间信号的运算 1、连续时间系统零状态响应 题目&函数说明 连续时间系统的微分方程为 y"(t) 4y’(t) 3y(t) f’(t) 2f(t) 当 输入信号 f(t) 20e-2tu(t) 时&#xff0c;初始值 y(0-) 2, y’(0-) 1, 求系统的零状态响应 Matlab 库函数中的 lsim(…

GNN Tensorflow packages

tf framework定义 tf.name_scope()函数 tf.name_scope(name)&#xff0c;用于定义python op的上下文管理器。 此上下文管理器将推送名称范围&#xff0c;这将使其中添加的所有操作的名称带有前缀。 例如&#xff0c;定义一个新的Python op my_op&#xff1a; def my_op(a,…

scratch踢足球 电子学会图形化编程scratch等级考试一级真题和答案解析2022年9月

目录 scratch踢足球 一、题目要求 1、准备工作 2、功能实现 二、案例分析

代码随想录算法训练营第三十九天| LeetCode62. 不同路径、LeetCode63. 不同路径 II

一、LeetCode62. 不同路径 1&#xff1a;题目描述&#xff08;62. 不同路径&#xff09; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…

python 视角下的 6 大程序设计原则

众所周知&#xff0c;python 是面向对象的语言。 但大多数人学习 python 只是为了写出“能够实现某些任务的自动化脚本”&#xff0c;因此&#xff0c;python 更令人熟知的是它脚本语言的身份。 那么&#xff0c;更近一步&#xff0c;如果使用 python 实现并维护一个大的项目…

基于SpringBoot的CSGO赛事管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SpringBoot 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目…

为研发效能而生|一场与 Serverless 的博弈

2022 年 11 月 3 日&#xff0c;第三届云原生编程挑战赛即将迎来终极答辩&#xff0c;18 支战队、32 位云原生开发者入围决赛&#xff0c;精彩即将开启。 云原生编程挑战赛项目组特别策划了《登顶之路》系列选手访谈&#xff0c;期待通过参赛选手的故事&#xff0c;看到更加生…

第1章 计算机系统概述

1.1 操作系统的基本概念 1.1.1 操作系统的概念 操作系统是计算机系统中最基本的系统软件。 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;是指控制和管理整个计算机系统的硬件与软件资源&#xff0c;合理地组织、调度计算机的工作与资源的分配&#xff0c;进…

锐捷端口安全实验配置

端口安全分为IPMAC绑定、仅IP绑定、仅MAC绑定 配置端口安全是注意事项 如果设置了IPMAC绑定或者仅IP绑定&#xff0c;该交换机还会动态学习下联用户的MAC地址 如果要让IPMAC绑定或者仅IP绑定的用户生效&#xff0c;需要先让端口安全学习到用户的MAC地址&#xff0c;负责绑定不生…

如何参与一个开源项目!

今天教大家如何给开源项目提交pr&#xff0c;成为一名开源贡献者。pr是 Pull Request 的缩写&#xff0c;当你在github上发现一个不错的开源项目&#xff0c;你可以将其fork到自己的仓库&#xff0c;然后再改动一写代码&#xff0c;再提交上去&#xff0c;如果项目管理员觉得你…