当前位置: 首页 > news >正文

ElasticSearch(三)—文档字段参数设置以及元字段

一、 字段参数设置

analyzer:

指定分词器。elasticsearch 是一款支持全文检索的分布式存储系统,对于 text类型的字段,首先会使用分词器进行分词,然后将分词后的词根一个一个存储在倒排索引中,后续查询主要是针对词根的搜索。
analyzer 该参数可以在每个查询、每个字段、每个索引中使用,其优先级如下(越靠前越优先):
1、字段上定义的分词器
2、索引配置中定义的分词器
3、默认分词器(standard)

normalizer:

规范化,主要针对 keyword 类型,在索引该字段或查询字段之前,可以先对原始数据进行一些简单的处理,然后再将处理后的结果当成一个词根存入倒排索引中,默认为 null,比如:

PUT index
{ "settings": { "analysis": { "normalizer": { "my_normalizer": { // 1
"type": "custom", "char_filter": [], "filter": ["lowercase", "asciifolding"] // 2
}
}
}
},"mappings": { "_doc": { "properties": { "foo": { "type": "keyword", "normalizer": "my_normalizer" // 3
}
}
}
}
}

代码 1:首先在 settings 中的 analysis 属性中定义 normalizer。
代码 2:设置标准化过滤器,示例中的处理器为小写、asciifolding。
代码 3:在定义映射时,如果字段类型为 keyword,可以使用 normalizer引用定义好的 normalizer

coerce:
数据不总是我们想要的,由于在转换 JSON body 为真正 JSON 的时候,整型数字 5 有可能会被写成字符串"5"或者浮点数 5.0,这个参数可以将数值不合法的部分去除。默认为 true。
例如:将字符串会被强制转换为整数、浮点数被强制转换为整数。
例如存在如下字段类型:

"number_one": { "type": "integer"}

声明 number_one 字段的类型为数字类型,那是否允许接收“6”字符串形式的数据呢?因为在 JSON 中,“6”用来赋给 int 类型的字段,也是能接受的,默认 coerce 为 true,表示允许这种赋值,但如果 coerce 设置为 false,此时 es只能接受不带双引号的数字,如果在coerce=false 时,将“6”赋值给 number_one时会抛出类型不匹配异常。

doc_values:
Doc values 的存在是因为倒排索引只对某些操作是高效的。 倒排索引的优势 在于查找包含某个项的文档,而对于从另外一个方向的相反操作并不高效,即:确定哪些项是否存在单个文档里,聚合需要这种次级的访问模式。
对于以下倒排索引:
在这里插入图片描述

如果我们想要获得所有包含 brown 的文档的词的完整列表,倒排索引是根据项来排序的,所以我们首先在词项列表中找到 brown ,然后扫描所有列,找到包含 brown 的文档。我们可以快速看到 Doc_1 和 Doc_2 包含 brown 这个 token。
然后,对于聚合部分,我们需要找到 Doc_1 和 Doc_2 里所有唯一的词项。 用倒排索引做这件事情代价很高: 我们会迭代索引里的每个词项并收集 Doc_1 和 Doc_2 列里面 token。这很慢而且难以扩展:随着词项和文档的数量增加,执行时间也会增加。
Doc values 通过转置两者间的关系来解决这个问题。倒排索引将词项映射到包含它们的文档,doc values 将文档映射到它们包含的词项:
在这里插入图片描述
当数据被转置之后,想要收集到 Doc_1 和 Doc_2 的唯一 token 会非常容易。获得每个文档行,获取所有的词项,然后求两个集合的并集。

doc_values 缺省是 true,即是开启的,并且只适用于非 text 类型的字段。

dynamic:
是否允许动态的隐式增加字段。在执行 index api 或更新文档 API 时,对于_source 字段中包含一些原先未定义的字段采取的措施,根据 dynamic 的取值,会进行不同的操作:

true,默认值,表示新的字段会加入到类型映射中。

false,新的字段会被忽略,即不会存入_souce 字段中,即不会存储新字段,也无法通过新字段进行查询。

strict,会显示抛出异常,需要新使用 put mapping api 先显示增加字段映射。

enabled:
是否建立索引,默认情况下为 true,es 会尝试为你索引所有的字段,但有时候某些类型的字段,无需建立索引,只是用来存储数据即可。也就是说,ELasticseaech 默认会索引所有的字段,enabled 设为 false 的字段,elasicsearch 会跳过字段内容,该字段只能从_source 中获取,但是不可搜。只有映射类型(type)和 object 类型的字段可以设置 enabled 属性。

eager_global_ordinals:

表示是否提前加载全局顺序号。Global ordinals 是一个建立在 doc values 和fielddata 基础上的数据结构, 它为每一个精确词按照字母顺序维护递增的编号。每一个精确词都有一个独一无二的编号 并且 精确词 A 小于精确词 B 的编号. Global ordinals 只支持 keyword 和 text 型字段,在 keyword 字段中, 默认是启用的 而在 text 型字段中 只有 fielddata 和相关属性开启的状态下才是可用的。

fielddata:
为了解决排序与聚合,elasticsearch 提供了 doc_values 属性来支持列式存储,但 doc_values 不支持 text 字段类型。因为 text 字段是需要先分析(分词),会影响 doc_values 列式存储的性能。
es 为了支持 text 字段高效排序与聚合,引入了一种新的数据结构(fielddata),使用内存进行存储。默认构建时机为第一次聚合查询、排序操作时构建,主要存储倒排索引中的词根与文档的映射关系,聚合,排序操作在内存中执行。因此fielddata 需要消耗大量的 JVM 堆内存。一旦 fielddata 加载到内存后,它将永久存在。
通常情况下,加载 fielddata 是一个昂贵的操作,故默认情况下,text 字段的字段默认是不开启 fielddata 机制。在使用 fielddata 之前请慎重考虑为什么要开启 fielddata。

ignore_above:
ignore_above 用于指定字段索引和存储的长度最大值,超过最大值的会被忽略。

ignore_malformed:
ignore_malformed 可以忽略不规则数据,对于 login 字段,有人可能填写的是 date 类型,也有人填写的是邮件格式。给一个字段索引不合适的数据类型发生异常,导致整个文档索引失败。如果 ignore_malformed 参数设为 true,异常会被忽略,出异常的字段不会被索引,其它字段正常索引。

index:
index 属性指定字段是否索引,不索引也就不可搜索,取值可以为 true 或者false,缺省为 true。

index_options:

index_options 控制索引时存储哪些信息到倒排索引中,,用于搜索和突出显示目的。
docs 只存储文档编号
freqs 存储文档编号和词项频率。
positions 文档编号、词项频率、词项的位置被存储
offsets 文档编号、词项频率、词项的位置、词项开始和结束的字符位置都被存储

fields:

fields 可以让同一文本有多种不同的索引方式,比如一个 String 类型的字段,可以使用 text 类型做全文检索,使用 keyword 类型做聚合和排序。

norms:
norms 参数用于标准化文档,以便查询时计算文档的相关性。norms 虽然对评分有用,但是会消耗较多的磁盘空间,如果不需要对某个字段进行评分,最好不要开启 norms。

null_value:
一般来说值为 null 的字段不索引也不可以搜索,null_value 参数可以让值为null 的字段显式的可索引、可搜索。

position_increment_gap:
文本数组元素之间位置信息添加的额外值。
举例,一个字段的值为数组类型:“names”: [ “John Abraham”, “Lincoln Smith”]。
为了区别第一个字段和第二个字段,Abraham 和 Lincoln 在索引中有一个间距,默认是 100。例子如下,这是查询”Abraham Lincoln”是查不到的:

PUT my_index/groups/1
{ "names": [ "John Abraham", "Lincoln Smith"]}
GET my_index/groups/_search
{ "query": { "match_phrase": {"names": { "query": "Abraham Lincoln"}}}}

指定间距大于 10 0 可以查询到:

GET my_index/groups/_search
{ "query": { "match_phrase": { "names": { "query": "Abraham Lincoln", "slop":101}}}}

想要调整这个值,在 mapping 中通过 position_increment_gap 参数指定间距即可。

properties:
Object 或者 nested 类型,下面还有嵌套类型,可以通过 properties 参数指定。比如:

PUT my_index
{ "mappings": { "my_type": { "properties": { "manager": { "properties": { "age": { "type": "integer" }, "name": { "type": "text" }}},"employees": { "type":"nested", "properties": { "age": { "type": "integer" }, "name": { "type":"text" }}}}}}}

对应的文档结构:

PUT my_index/my_type/1
{ "region": "US", "manager": { "name": "Alice White", "age": 30},"employees": [{"name": "John Smith", "age": 34},{ "name": "Peter Brown", "age": 26}]}

search_analyzer:
通常,在索引时和搜索时应用相同的分析器,以确保查询中的术语与反向索引中的术语具有相同的格式,如果想要在搜索时使用与存储时不同的分词器,则使用 search_analyzer 属性指定,通常用于 ES 实现即时搜索(edge_ngram)。

similarity:
指定相似度算法,其可选值:

BM25
当前版本的默认值,使用 BM25 算法。

classic
使用 TF/IDF 算法,曾经是 es,lucene 的默认相似度算法。

boolean
一个简单的布尔相似度,当不需要全文排序时使用,并且分数应该只基于查
询条件是否匹配。布尔相似度为术语提供了一个与它们的查询boost相等的分数。

store:
默认情况下,字段值被索引以使其可搜索,但它们不存储。这意味着可以查询字段,但无法检索原始字段值。通常这并不重要。字段值已经是_source 字段的一部分,该字段默认存储。如果您只想检索单个字段或几个字段的值,而不是整个_source,那么这可以通过字段过滤上下文 source filting context 来实现。
在某些情况下,存储字段是有意义的。例如,如果您有一个包含标题、日期和非常大的内容字段的文档,您可能只想检索标题和日期,而不需要从大型_source 字段中提取这些字段,可以将标题和日期字段的 store 定义为 ture。

term_vector:
Term vectors 包含分析过程产生的索引词信息,包括:
索引词列表
每个索引词的位置(或顺序)
索引词在原始字符串中的原始位置中的开始和结束位置的偏移量。
term vectors 会被存储,索引它可以作为一个特使的文档返回。
term_vector 可取值:
no
不存储 term_vector 信息,默认值。
yes
只存储字段中的值。
with_positions
存储字段中的值与位置信息。
with_offsets
存储字段中的值、偏移量
with_positions_offsets
存储字段中的值、位置、偏移量信息。

二、 元字段 meta-fields

一个文档根据我们定义的业务字段保存有数据之外,它还包含了元数据字段(meta-fields)。元字段不需要用户定义,在任一文档中都存在,有点类似于数据库的表结构数据。在名称上有个显著的特征,都是以下划线“_”开头。
大体分为五种类型:身份(标识)元数据、索引元数据、文档元数据、路由元数据以及其他类型的元数据,当然不是每个文档这些元字段都有的。

身份(标识)元数据

_index:文档所属索引 , 自动被索引,可被查询,聚合,排序使用,或者脚本里访问。

_type:文档所属类型,自动被索引,可被查询,聚合,排序使用,或者脚本里访问。

_id:文档的唯一标识,建索引时候传入 ,不被索引,可通过_uid 被查询,脚本里使用,不能参与聚合或排序。

_uid:由_type 和_id 字段组成,自动被索引 ,可被查询,聚合,排序使用,或者脚本里访问,6.0.0 版本后已废止。

索引元数据:

_all: 自动组合所有的字段值,以空格分割,可以指定分器词索引,但是整个值不被存储,所以此字段仅仅能被搜索,不能获取到具体的值。6.0.0 版本后已废止。

_field_names:索引了每个字段的名字,可以包含 null 值,可以通过 exists查询或 missing 查询方法来校验特定的字段

文档元数据:

_source : 一个 doc 的原生的 json 数据,不会被索引,用于获取提取字段值 ,启动此字段,索引体积会变大,如果既想使用此字段又想兼顾索引体积,可以开启索引压缩。_source 是可以被禁用的,不过禁用之后部分功能不再支持,这些功能包括:部分 update api、运行时高亮搜索结果索引重建、修改 mapping 以及分词、索引升级debug 查询或者聚合语句索引自动修复。

_size: 整个_source 字段的字节数大小,需要单独安装一个 mapper-size 插
件才能展示。

路由元数据:
_routing: 一个 doc 可以被路由到指定的 shard 上。

其他
_meta:一般用来存储应用相关的元信息。例如:

put /open-soft/_mapping
{ "_meta": { "class": "cn.enjoyedu.User", "version": {"min": "1.0", "max": "1.3"}}}

相关文章:

ElasticSearch(三)—文档字段参数设置以及元字段

一、 字段参数设置 analyzer: 指定分词器。elasticsearch 是一款支持全文检索的分布式存储系统,对于 text类型的字段,首先会使用分词器进行分词,然后将分词后的词根一个一个存储在倒排索引中,后续查询主要是针对词根…...

ARM功耗管理之压力测试和PM_DEBUG实验

安全之安全(security)博客目录导读 ARM功耗管理精讲与实战汇总参见:Arm功耗管理精讲与实战 思考:睡眠唤醒实验?压力测试?Suspend-to-Idle/RAM/Disk演示? 1、实验环境准备 2、软件代码准备 3、唤醒源 4、Suspend-…...

ESP8266用AT指令实现连接MQTT

1准备工作 硬件(ESP8266)连接电脑 硬件已经烧入了MQTT透传固件 2实现连接 2-1(进入AT模式) 打开串口助手发送如下指令 AT 2-2(复位) ATRST 2-3(开启DHCP,自动获取IP&#x…...

人工智能与机器学习原理精解【5】

文章目录 最优化基础理论特征值(Eigenvalue)特征向量(Eigenvector)特征值和特征向量的重要性计算方法特征值一、特征值分解的定义二、特征值分解的算法三、特征值分解的例子 正定矩阵Hessian矩阵的特征值Hessian矩阵的含义Hessian…...

为什么用LeSS?

实现适应性 LeSS是一个产品开发的组织系统,旨在最大化一个组织的适应性。关于适应性(或者敏捷性,也就是敏捷开发的初衷)我们是指优化: 以相对低的成本改变方向的能力,主要是基于通过频繁交付产生的探索。从…...

力扣高频SQL 50题(基础版)第七题

文章目录 力扣高频SQL 50题(基础版)第七题1068. 产品销售分析 I题目说明思路分析实现过程准备数据:实现方式:结果截图:总结: 力扣高频SQL 50题(基础版)第七题 1068. 产品销售分析 I 题目说明 …...

【音视频】一篇文章区分直播与点播、推流与拉流

文章目录 前言直播和点播的概念及区别直播是什么点播是什么 直播和点播的区别举例说明推流与拉流推流是什么拉流是什么 推流与拉流的区别举例说明 总结 前言 在音视频领域,直播、点播、推流和拉流是常见的概念,每个术语都有其特定的含义和应用场景。了解…...

3d动画软件blender如何汉化?(最新版本4.2)

前言 Blender是一个非常强大的3d动画软件,总能受到大量工作者的青睐。 但是,对于新手来说(尤其是英语学渣),语言是个难事。大部分blender打开时都是英文,对新手使用具有一定的障碍。因此,我们需…...

C++学习笔记04-补充知识点(问题-解答自查版)

前言 以下问题以Q&A形式记录,基本上都是笔者在初学一轮后,掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系,也适合做查漏补缺和复盘。 本文对读者可以用作自查,答案在后面&#xff0…...

Vue el-table的自定义排序返回值为null,设置刷新页面保持排序标志,导航时elementui组件不更新

自定义排序使用sort-change"sortChange"监听&#xff0c;表列需设置为sortable“custom”&#xff08;自定义&#xff09; <el-table:data"tableData"bordersort-change"sortChange":default-sort"{prop:sortProp,order:sortOrder}&quo…...

一起笨笨的学C ——16链表基础

目录 目录 前言 正文 链表定义&#xff1a; 基本创建链表程序&#xff1a; 链表结点插入&#xff1a; 对角线记忆法&#xff1a; 画图理解法&#xff1a; 链表结点删除&#xff1a; 链表销毁&#xff1a; 后语 前言 链表理解方法分享&#xff0c;愿你的大脑也能建立一个…...

信息学奥赛一本通1917:【01NOIP普及组】装箱问题

1917&#xff1a;【01NOIP普及组】装箱问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 4178 通过数: 2473 【题目描述】 有一个箱子容量为VV(正整数&#xff0c;0≤V≤200000≤V≤20000&#xff09;&#xff0c;同时有n个物品&#xff08;0≤n≤300≤n≤30),…...

android user 版本如何手动触发dump

项目需要在android user版本增加手动触发dump方法&#xff0c;用以确认user版本发生dump后系统是重启还是真正发生dump卡机&#xff01; 本文以qcom平台项目为例描述所做的修改&#xff0c;留下足迹以备后忘。 闲言少叙&#xff0c;开整上干货&#xff1a; 一、修改bin文件 …...

RedHat Linux 7.5 安装 mssql-server

RedHat Linux 7.5 安装 mssql-server 1、安装部署所需的依赖包 [rootlocalhost ~]# yum -y install libatomic bzip2 gdb cyrus-sasl cyrus-sasl-gssapi Loaded plugins: ulninfo Resolving Dependencies --> Running transaction check ---> Package bzip2.x86_64 0:1…...

Vue的SSR和预渲染:提升首屏加载速度与SEO效果

引言 在现代Web应用开发中,首屏加载速度和搜索引擎优化(SEO)是衡量应用性能的重要指标。Vue.js 作为流行的前端框架,提供了服务器端渲染(SSR)和预渲染(prerendering)两种技术来提升这些指标。本文将深入探讨如何使用 Vue 的 SSR 和预渲染技术,提供详细的代码示例和最…...

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)...

【SpringBoot】 4 Thymeleaf

官网 https://www.thymeleaf.org/ 介绍 Thymeleaf 是一个适用于 Web 和独立环境的现代服务器端 Java 模板引擎。 模板引擎&#xff1a;为了使用户界面和业务数据分离而产生的&#xff0c;它可以生成特定格式的文档&#xff0c;用于网站的模板引擎会生成一个标准的 html 文档…...

动静资源的转发操作

目录 Nginx中的location指令 静态资源的转发 动态资源的转发 注意事项 深入研究 如何在Nginx中实现对特定后缀文件的静态资源进行反向代理&#xff1f; Nginx中location指令的优先级是怎样确定的&#xff1f; 为什么在使用proxy_pass时要区分是否带有斜杠&#xff1f; N…...

Windows系统安全加固方案:快速上手系统加固指南(上)

无论是个人用户、小型企业还是大型机构&#xff0c;都需要采取措施保护其计算机系统免受各种威胁、系统加固常见的应用场景有个人用户、 AWD 比赛、公共机构以及企业环境等等 文档目录 一、Windows常用命令二、Windows常见端口三、账户安全3.1 默认账户安全3.2 按照用户分配账户…...

git连接远程仓库

一、本地新建代码,上传到远程仓库 1.git init #初始化本地仓库 2.git remote -v #查看当前仓库的远程地址 3.git remote add origin 远程仓库的URL 4.git branch master / git branch dev 创建 主分支或者 dev 分支 5.git checkout master/dev. 切换到主分支或者dev 分支…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...