ES学习笔记

2023-11-06

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": {}}
                }
            }
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES学习笔记 的相关文章

  • 在 Python 中发送 100,000 个 HTTP 请求的最快方法是什么?

    我正在打开一个包含 100 000 个 URL 的文件 我需要向每个 URL 发送 HTTP 请求并打印状态代码 我正在使用 Python 2 6 到目前为止 我已经了解了 Python 实现线程 并发的许多令人困惑的方式 我什至看过蟒蛇一
  • IFormFile 未由 dropzone uploadMultiple 请求填充

    我遇到的问题是 IFormFile 列表没有填充给定的文件 但是当我调用 HttpContext Request Form Files 时然后我就可以访问这些文件了 我更喜欢使用 IFormFile 因为它似乎是新的 Dotnet core
  • 从套接字读取 C HTTP

    我想知道如何判断是否已从套接字接收到所有数据 这是一个简单的网络代理 现在我正在处理请求部分 所以发送的内容应该以 r n r n 结尾 我不知道请求会持续多久 我在这里读过一些帖子 说我应该检查读取函数是否返回 0 但其他人说0只在客户端
  • 在 grails 中编写代理

    我正在使用 Gralis 1 3 7 我正在编写一个控制器 需要从另一台服务器获取 PDF 文件并将其返回给客户端 我想以某种相当有效的方式来做到这一点 例如 class DocController def view URL source
  • HTTP 响应可以省略 Reason-Prase 吗?

    正常的 HTTP 响应如下所示 HTTP 1 0 200 OK 可以省略什么吗RFC http www w3 org Protocols rfc2616 rfc2616 sec6 html称为原因短语 就像是 HTTP 1 0 200 RF
  • 志愿者匹配 API Objective C

    我正在使用 AFNetworking 对 VolunteerMatch API 执行 Web 请求 当我执行请求时 我收到 200 代码 但没有收到响应 典型的 VolunteerMatch 请求如下所示 GET api call acti
  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 通用开源 REST 客户端? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用意图过滤器从 URL 打开 Android 应用程序不起作用

    我有一个 Android 应用程序 人们用它来替代网站 因此 当用户遇到网站的 URL 时 我想为他们提供在我的应用程序中而不是在浏览器中 打开 URL 的选项 换句话说 我希望出现弹出窗口 让他们在我的应用程序和浏览器 可能还有其他应用程
  • 静默地将 api 资源移动到另一个 url

    我已经用 WepApi 2 编写的 api 与主网站紧密结合 我决定将其与另一个网络应用程序解耦 以使事情更加隔离 我遵循了这样的步骤 将所有 API 控制器提取到另一个项目 创建属性以将当前使用旧 URL 的所有用户重定向到新 URL 由
  • Node.JS Web 服务器中的安全性

    所以 我正在学习 Node JS 到目前为止我很喜欢它 我已经有几个项目在工作了 我想我可以在其中使用nodejs 不过 我担心安全问题 如果我使用 Node JS http 模块编写自定义 Web 服务器 我是否可能非常容易受到攻击 Ap
  • 是否可以阻止在每个 HTTP 请求中发送 cookie?

    我最近发现 这里 每个网络请求都会发送浏览器cookie吗 https stackoverflow com questions 1336126 does every web request send the browser cookies
  • 使用传输编码分块的 HTTP 响应中的最大块大小是多少?

    The w3 org RFC2616 http www w3 org Protocols rfc2616 rfc2616 sec3 html sec3 6 1似乎没有定义块的最大大小 但是如果没有最大块大小 则没有空间用于块扩展 必须有一个
  • HttpGet 401 状态代码后跟 200 状态代码

    我使用 Apachage HttpComponent 访问 Web 服务时遇到奇怪的行为 我可以访问服务器日志 当我尝试连接到服务器并执行 httpGet 命令时 我可以在日志中首先看到 401 状态 http 未经授权 然后看到 200
  • 身份验证中的随机数使用

    在基于摘要的身份验证中 随机数由服务器生成 然而 在基于 OAuth 的身份验证中 随机数是由客户端生成的 我想知道是否有人知道差异的原因 随机数用于使请求唯一 在没有随机数的身份验证方案中 恶意客户端可以生成一次请求并重放多次 即使计算成
  • 从浏览器中删除cookie?

    有什么方法可以指示网络浏览器完全delete一个人的cookie是用PHP设置的吗 我不想expiry或者等待浏览器closed 对于删除 我的意思是实际上不再将其列在 cookie 列表中 尝试这样删除所有 cookie foreach
  • 如何使用独立的 Jetty 进行服务器推送

    我正在尝试使用独立的 Jetty 在静态网站上测试服务器推送功能 我的网站由一个index html 1个CSS 一堆图像组成 目录结构为 Album index html style css images image 1 png a se
  • HttpRequest PUT内容到poco库中

    我想使用 HTTP PUT 请求将一些数据从 C 应用程序发送到服务器 我在用poco http pocoproject org我的应用程序中的网络库 我正在使用这个代码片段 HTTPClientSession session uri ge
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 在golang中获取TTFB(第一个字节的时间)值

    我正在尝试获取 TTFB 值和 Connect 值 c exec Command curl w Connect time connect TTFB time starttransfer Total time time total o dev

随机推荐

  • 十二条后端开发经验分享,总有一条你不知道

    前言 本文是博主从事后端开发以来 对公司 个人项目的经验总结 包含代码编写 功能推荐 第三方库使用及优雅配置等 希望大家看到都能有所收获 博主github地址 https github com wayn111 一 优雅的进行线程池异常处理
  • SQL语句中对时间字段进行区间查询

    title SQL语句中对时间字段进行区间查询 created 2022 03 15T01 31 14 505Z modified 2022 03 15T01 48 07 370Z SQL语句中对时间字段进行区间查询 当项目中需要查询某一段
  • docker安装mysql8 并且忽略大小写问题解决

    一 docker安装mysql8 1 拉取镜像 docker pull mysql 2 docker安装mysql 只需要执行docker run name mysq db p 3306 3306 e MYSQL ROOT PASSWORD
  • WebSocket:最简单的实现方式——>初学者。WebSocket注入Service的方法。

    使用本方法不需要任何jar包 但是需要引用tomcat 不然无法引用注释 ServerEndpoint var ws new WebSocket url protocol url 指定连接的服务器 protocol 可接受的子协议 var
  • python中的pygame使用_python 中的pygame的一些基本使用总结

    什么是pygame pygame是一个python中的一个游戏库 用于2D游戏的开发 下面是关于pygame的一些常用方法 首先 需要导入 import pygame 窗口的相关操作 创建一个窗口 screen pygame display
  • verilog HDL +UART实验+数码管动态显示

    功能 板子接受通过RS232接受串口调试助手发送的一个字节数据 然后将其转化成0 255的十进制数 在4位数码管上 显示出来 只用到了3位 不用的位熄灭 只有有数字的位才显示 说明 UART部分还是参考特权的Verilog程序 谢谢前辈啊
  • 人脸图像数据增强

    为什么要做数据增强 在计算机视觉相关任务中 数据增强 Data Augmentation 是一种常用的技术 用于扩展训练数据集的多样性 它包括对原始图像进行一系列随机或有规律的变换 以生成新的训练样本 数据增强的主要目的是增加模型的泛化能力
  • 技术前言 - 芯片制造工序详解

    制造工序 芯片简介 工序简介 硅片制造 生产流程 行业壁垒 IC设计 设计流程 行业壁垒 芯片制造 封装测试 制造流程 封装测试 行业壁垒 九大核心设备 参考文档 芯片简介 种类 1 按照性质 数字 模拟芯片 2 按照用途 计算机 家电 手
  • 对象检测工具包mmdetection简介、安装及测试代码

    mmdetection是商汤和港中文大学联合开源的基于PyTorch的对象检测工具包 属于香港中文大学多媒体实验室open mmlab项目的一部分 该工具包提供了已公开发表的多种流行的检测组件 通过这些组件的组合可以迅速搭建出各种检测框架
  • 常用序列的MATLAB代码(一)

    1 典型序列函数 1 单位冲激序列 function x n impseq n0 ns nf ns 序列的起点 nf 序列的终点 n0 序列在n0处有一个单位脉冲 x 产生的单位采样序列 n 产生序列的位置信息 n ns nf x n n0
  • vue-cli 3.0 使用 npm 报错

    问题 vue cli 3 0 使用 npm 报错 最近 vue 项目打算 使用 vue cli 3 0 生成模板 全部默认 配置 生成模板后 使用了 npm 安装依赖后 项目不能正常运行 看npm install 后的执行 代码 好像在 不
  • 老孙的爬虫(四)-------储存多层次的数据,使用递归不断请求,设置id与p_id确定数据的父子关系

    测试网站 https d qianzhan com xdata list xfyyy0yyIxPyywyy2xDxfd html 数据的储存要求 储存的数据能看出父子关系 思路 因为该网站数据是层层打开的 使用递归不断请求 需要额外储存一些
  • PB错误代码

    string ls msgchoose case error number case 1 by zero ls msg 发生被 0 除错误 case 2 2 Null object reference ls msg 空对象引用 case 3
  • 自动实现的属性-Auto-Implemented Properties

    自动实现的属性 C 编程指南 2015 07 20 作者 在 C 3 0 及更高版本 当属性访问器中不需要任何其他逻辑时 自动实现的属性会使属性声明更加简洁 它们还允许客户端代码创建对象 当你声明以下示例中所示的属性时 编译器将创建仅可以通
  • 影视剪辑,视频剪辑流程,如何进行混剪

    一个人如何在家自学剪辑 今天经验分享来啦 视频剪辑流程 一 建立好项目文件夹 根据时间 地点 大体拍摄内容等分类 在不同的文件夹存入对应的物料和工程 二 获取素材 提前收集好要用的包装素材与音乐网站 进行及时补充素材 三 回看和分类 按照脚
  • 磁链

    1 定义 为通电线圈的匝数与磁通量的乘积 通常用 lambda 或 psi 标记 即 N 或 N 其国际单位制单位与磁通量同为韦伯 由于法拉第对电磁学的解释 一个线圈的磁链也可以表示为通过线圈的电压对其时间的积分 即 因此其单位也可以用伏特
  • 阿里云SDK上传视频

    1 老样子 先看效果图 2 首先到阿里云下载所需要用到的SDK 3 下载好的 解压之后 目录以及运行起来是以下这个样子的 4 在实际项目中引用 先将SDK添加到项目中 放到public目录下 5 在public文件下的index html引
  • GDI映射:设备坐标与逻辑坐标

    1 设备坐标 对显示器而言就是屏幕 其单位是像素 对打印机而言就是打印机的像素点 这个坐标与具体的设备相关 所以叫设备坐标 目前用到的就是显示器的像素 显示器的设备坐标有三种 屏幕坐标 窗口坐标 客户区坐标 屏幕坐标 以整个屏幕为显示区 屏
  • BoT-SORT与Strong-SORT论文对比及思考总结

    BoT SORT与Strong SORT论文对比及思考总结 接上篇BoT SORT论文阅读笔记 并对Strong SORT论文研读与BoT SORT的更新点对比有了以下的思考总结 Strong SORT论文 Strong SORT代码 通过
  • ES学习笔记

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