ElasticSearch 高级查询语法Query DSL实战

ES倒排索引
当数据写入 ES 时,数据将会通过 分词 被切分为不同的 term,ES 将 term 与其对应的文 档列表建立一种映射关系,这种结构就是 倒排索引。如下图所示:
为了进一步提升索引的效率,ES 在 term 的基础上利用 term 的前缀或者后缀构建了 term index, 用于对 term 本身进行索引,ES 实际的索引结构如下图所示:

这样当我们去搜索某个关键词时,ES 首先根据它的前缀或者后缀迅速缩小关键词的在 term dictionary 中的范围,大大减少了磁盘IO的次数。
        
单词词典(Term Dictionary) :记录所有文档的单词,记录单词到倒排列表的 关联关系
        常用字典数据结构:
        

倒排列表(Posting List)-记录了单词对应的文档结合,由倒排索引项组成

倒排索引项(Posting):
        文档ID
        词频TF–该单词在文档中出现的次数,用于相关性评分
        位置(Position)-单词在文档中分词的位置。用于短语搜索 (match phrase query)
        偏移(Offset)-记录单词的开始结束位置,实现高亮显示

Elasticsearch 的JSON文档中的每个字段,都有自己的倒排索引。

可以指定对某些字段不做索引:
        优点︰节省存储空间
        缺点: 字段无法被搜索
文档映射Mapping
Mapping类似数据库中的schema的定义 ,作用如下:
        定义索引中的字段的名称
        定义字段的数据类型,例如字符串,数字,布尔等
        字段,倒排索引的相关配置(Analyzer)
ES中Mapping映射可以分为动态映射和静态映射

动态映射:
在关系数据库中,需要事先创建数据库,然后在该数据库下创建数据表,并创建表字段、类 型、长度、主键等,最后才能基于表插入数据。而Elasticsearch中不需要定义Mapping映 射(即关系型数据库的表、字段等), 在文档写入Elasticsearch时,会根据文档字段自动识 别类型,这种机制称之为动态映射。
静态映射:
静态映射是在Elasticsearch中也可以事先定义好映射,包含文档的各字段类型、分词器 等,这种方式称之为静态映射。动态映射(Dynamic Mapping)的机制,使得我们无需手动定Mappings,
Elasticsearch会自动根据文档信息,推算出字段的类型。但是有时候会推算的不对,例如地 理位置信息。 当类型如果设置不对时,会导致一些功能无法正常运行,例如Range查询
Dynamic Mapping类型自动识别:

示例
#删除原索引DELETE /user#创建文档(ES根据数据类型, 会自动创建映射)PUT /user/_doc/1{"name":"yanqiuxiang","age":34,"address":"江西南昌"}#获取文档映射GET /user/_mapping

思考:能否后期更改Mapping的字段类型?

两种情况:
新增加字段
      1、  dynamic设为true时,一旦有新增字段的文档写入,Mapping 也同时被更新
        2、dynamic设为false,Mapping 不会被更新,新增字段的数据 无法被索引,但是信息会出现在 _source中
        3、dynamic设置成strict(严格控制策略),文档写入失败,抛出异常      
   
对已有字段,一旦已经有数据写入,就不再支持修改字段定义
        Lucene 实现的倒排索引,一旦生成后,就不允许修改
如果希望改变字段类型,可以利用 reindex API,重建索引
原因:
        如果修改了字段的数据类型,会导致已被索引的数据无法被搜索
        但是如果是增加新的字段,就不会有这样的影响
dynamic设置成strict,新增字段导致文档插入失败
PUT /user
{"mappings": {"dynamic": "strict","properties": {"name": {"type": "text"},"address": {"type": "object","dynamic": "true"}}}
}

修改dynamic后再次插入文档成功

#修改daynamicPUT /user/_mapping{"dynamic":true}
对已有字段的mapping修改
具体方法:
1)如果要推倒现有的映射, 你得重新建立一个静态索引
2)然后把之前索引里的数据导入到新的索引里
3)删除原创建的索引
4)为新索引起个别名, 为原索引名
PUT / user2 
{"mappings": {"properties": {"name": {"type": "text"},"address": {"type": "text","analyzer": "ik_max_word"}}}
}POST _reindex 
{"source": {"index": "user"},"dest": {"index": "user2"}
}DELETE /userPUT /user2/_alias/userGET /user
注意: 通过这几个步骤就实现了索引的平滑过渡,并且是零停机
常用Mapping参数配置
        index: 控制当前字段是否被索引,默认为true。 如果设置为false,该字段不可被搜索
PUT /user 
{"mappings": {"properties": {"address": {"type": "text","index": false},"age": {"type": "long"},"name": {"type": "text"}}}
}

有四种不同基本的index options配置,控制倒排索引记录的内容:
        docs : 记录doc id
        freqs:记录doc id 和term frequencies(词频)
        positions: 记录doc id / term frequencies / term position
        offsets: doc id / term frequencies / term posistion/character offsets

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis中的渐进式遍历-Scan命令

之前我们学习过遍历命令keys,而keys *是一次性的把整个redis中所有的key都获取到.在不知道当前redis中有多少key的情况下,这个操作是非常危险的,可能会一下子得到太多的key而阻塞redis服务器.从而使其他redis客户端卡顿. 通过渐进式遍历,就可以做到,既可以获取到所有的key,同时…

linux服务器添置一块新硬盘操作

之前有一台ubuntu服务器,考虑未来存储容量可能不够,添加了一块新的硬盘,这是本次添置硬盘过程。 首次接上硬盘,提示: 没有找到新接入设备,查看接线,主板有个硬盘接线端子坏了,更换一…

【MySQL事务篇】多版本并发控制(MVCC)

多版本并发控制(MVCC) 文章目录 多版本并发控制(MVCC)1. 概述2. 快照读与当前读2.1 快照读2.2 当前读 3. MVCC实现原理之ReadView3.1 ReadView概述3.2 设计思路3.3 ReadView的规则3.4 MVCC整体操作流程 4. 举例说明4.1 READ COMMITTED隔离级别下4.2 REPEATABLE READ隔离级别下 …

C# wpf 实现任意控件(包括窗口)更多拖动功能

系列文章目录 第一章 Grid内控件拖动 第二章 Canvas内控件拖动 第三章 任意控件拖动 第四章 窗口拖动 第五章 附加属性实现任意拖动 第六章 拓展更多拖动功能(本章) 文章目录 系列文章目录前言一、添加的功能1、任意控件MoveTo2、任意控件DragMove3、边…

【计算机网络笔记】网络层服务与核心功能

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

[云原生案例2.1 ] Kubernetes的部署安装 【单master集群架构 ---- (二进制安装部署)】节点部分

文章目录 1. 常见的K8S安装部署方式1.1 Minikube1.2 Kubeadm1.3 二进制安装部署 2. Kubernetes单master集群架构 ---- (二进制安装部署)2.1 前置准备2.2 操作系统初始化2.3 部署 docker引擎 ---- (所有 node 节点)2.4 部署 etcd 集…

Windows 下编译 TensorFlow 2.9.1 CC库

参考 Intel 的 tensorflow 编译指导,不过项目还是可以用 TF原本的,不是一定要选择Intel 的TF版本。 安装 MSVC 2019 安装 Intel OneDNN OneMKL 似乎也可以不安装 ( & ) https://www.intel.cn/content/www/cn/zh/developer/articles/tool/one…

Linux的常见指令(三)

目录 一、管道 | 二、find 三、which 四、grep 五、zip/unzip 六、alias 七、输出重定向与输入重定向 1、echo 2、输出重定向 3、输入重定向 八、tar 九、bc 十、uname -r 十一、热键 一、管道 | 我们首先创建一个下面这样的文件 前面我们知道了使用head和tail分…

【T690 之十二】基于方寸EVB2开发板(T690芯片)构建基于GMSSL的文件系统的方式

备注: 1,假设您已对方寸微电子的T690系列芯片的使用方式都有了一定的了解,然后需要构建基于GMSSL的文件系统,此文才对您有意义; 2,若您对方寸微电子的T690芯片不了解,但想进一步了解它&#xff…

YOLOv8-Cls推理详解及部署实现

目录 前言一、YOLOv8-Cls推理(Python)1. YOLOv8-Cls预测2. YOLOv8-Cls预处理3. YOLOv8-Cls推理 二、YOLOv8-Cls推理(C)1. ONNX导出2. YOLOv8-Cls预处理3. YOLOv8-Cls推理 三、YOLOv8-Cls部署1. 源码下载2. 环境配置2.1 配置CMakeLists.txt2.2 配置Makefile 3. ONNX导出4. 源码修…

GoLong的学习之路(二十一)进阶,语法之并发(go最重要的特点)(协程的主要用法)

并发编程在当前软件领域是一个非常重要的概念,随着CPU等硬件的发展,我们无一例外的想让我们的程序运行的快一点、再快一点。Go语言在语言层面天生支持并发,充分利用现代CPU的多核优势,这也是Go语言能够大范围流行的一个很重要的原…

云闪付支付接口的技术实现方式

(一)整体框架。      云闪付的整体架构如图 1 所示,总体与原有的支付清算体系相同,只是增加了云端支付平台、移动应用平台和移动应用。云端支付平台主要对移动应用端的限制密钥进行更新和管理,同时对云端支付账户进…

k8s存储卷

目录 1、emptyDir存储卷 2、hostPath存储卷 3、nfs共享存储卷 4、PVC 和 PV 4.1 PV和PVC之间的相互作用遵循这个生命周期: 4.2 PV的状态 4.3 一个PV从创建到销毁的具体流程如下: 静态PVC: 动态PVC 1、emptyDir存储卷 当Pod被分配给节…

把wpf的窗体保存为png图片

昨晚在stack overflow刷问题时看到有这个问题,今天早上刚好来尝试学习一下 stack overflow的链接如下: c# - How to render a WPF UserControl to a bitmap without creating a window - Stack Overflow 测试步骤如下: 1 新建.net frame…

Banana Pi BPI-M6开源硬件开发板介绍以及与 Raspberry Pi 5 的比较

Banana Pi BPI-M6 Banana Pi BPI-M6是Banana-Pi组织最新开发的一款类似于Raspberry Pi的单板计算机,具有相同的尺寸格式和相似的功能。 今天我想向您介绍这些功能,并将它们与新的 Raspberry 5 提供的功能进行一些比较。 Raspberry Pi是英国 Raspberry P…

黑马程序员项目-黑马点评

黑马点评1 短信登录 基于Session实现登录流程 发送验证码: 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进行…

计算机毕业设计java+springboot+vue的旅游攻略平台

项目介绍 本系统结合计算机系统的结构、概念、模型、原理、方法,在计算机各种优势的情况下,采用JAVA语言,结合SpringBoot框架与Vue框架以及MYSQL数据库设计并实现的。员工管理系统主要包括个人中心、用户管理、攻略管理、审核信息管理、积分…

群晖管家+内网穿透实现公网远程访问本地黑群晖

白嫖怪狂喜!黑群晖也能使用群晖管家啦! 文章目录 白嫖怪狂喜!黑群晖也能使用群晖管家啦!1.使用环境要求:2.下载安装群晖管家app3.随机地址登陆群晖管家app4.固定地址登陆群晖管家app 自己组装nas的白嫖怪们虽然也可以通…

3.JMeter高级使用-让你与众不同

目录 概述插件下载与安装插件下载配置插件 服务器硬件资源监控(精简版)配置服务端代理JMeter配置监控CPU监控网络 JMeter下载结束 概述 今日目标: 插件下载与安装Basic Graphs 主要点 Average Response Time 平均响应时间Active Threads 活动线程数Successful/Fai…

EOCR-3E420,3EZ,3DE电机保护器与变频器配合使用的方法

上海韩施电气自动化设备有限公司提供 在工业现场中,电动机的起动与运行很多时候需要变频器参与其中,以达到降低电机维护成本、增加电机寿命的目的。采用变频器运转时,随着电机的加速相应提高频率和电压,起动电流被限制在 150%额定…