【Elasticsearch】索引、更新和删除数据

article/2025/10/9 15:18:39

前言

1、使用映射类型来定义同一个索引中的多种文档类型

2、可以在映射中使用的不同字段类型

3、使用预定义的字段及其选项

4、上述这些如何帮助数据的索引、更新和删除


内容

3种类型字段,这些字段是元数据,es会自动管理它们

核心——这些字段包括字符串和数值型

数组和多元字段——这些字段在某个字段中存储相同核心类型的多个值。例如,tags字段可以拥有多个标签

预定义——这些字段包括_ttl和_timestamp

使用映射来定义各种文档

1、获取目前映射,新建类型的时候,如果不知道字段的映射,es会自动创建映射。

curl 'localhost:9200/get-together/group/_mapping?pretty'

2、定义新的映射(创建索引之后,可以向某类型中插入任何文档之前顶一个新的映射)

curl -XPUT 'localhost:9200/get-together/_mapping/new-events' -d '{"new-events" : {"properties" : {"host" : {"type" : "string"}}}
}

3、扩展现有的映射:如果某个类型的映射目前含有两个来自初始映射的字段,外加定义的一个新字段。随着新字段的加入,初始的映射被扩展了,任何时候都支持这样的操作。es将此称为现有映射和先前提供的映射的合并。

  • 并非所有的合并都是奏效的,例如:无法改变现有字段的数据类型,而且通常无法改变一个字段被索引的方式。合并操作失败会抛出:MergeMappingException的异常

解决方式:重新索引类型中的所有数据

(1)将类型里的所有数据移除,移除数据的时候也会移除现有的映射

(2)设置新的映射

(3)再次索引所有的数据

4、映射的同时可以设置许多的分析选项,eg:可以配置分析,生成原始词条的同义词,这样的同义词的查询同样可以匹配。index选项可以设置为:analyzed(默认)、not_analyzed或no。例如,将name字段设置为not_analyzed:

curl -XPUT 'localhost:9200/get-together/_mapping/new-events' -d '{"new-events" : {"properties" : {"name" : {"type" : "string","index" : "not_analyzed"}}}
}'

用于定义文档字段的核心类型

1、字符串类型

新增一条文档记录

curl -XPUT 'localhost:9200/get-together/new-events/1' -d '{"name": "Late Night with Elasticsearch","date": "2013-10-25T19:00"
}'

搜索单词late

curl 'localhost:9200/get-together/new-events/_search?pretty' -d '{"query": {"query_string": {"query": "late"}}
}'

注意:搜索字符串的时候,需要考虑索引过程中的字符串有没有被分析;搜索条件的字符串有没有被分析

2、数值类型

数值类型可以是浮点数,也可以是非浮点数。非小数:byte、short、int或者long。小数:float和double。谨慎选择数值类型,对它们选择将会影响索引的大小,以及能够索引的取值范围。不知道所需要的整型数字取汁范围或者是浮点数字的精度,让es自动检测映射更为安全:为整数值分配long,浮点数值分配double。索引可能变得更大、变得更慢,因为这种类型占据了更多空间,但是,在索引的过程中es不会发生超出范围的错误。

3、日期类型

设置日期字段映射的时候,设置日期的format形式。运作过程:通常提供一个表示日期的字符串,es解析这个字符串,将其作为long的数值存入Lucene的索引。搜索文档的时候,提供date的字符串,在后台es会将这个日期字符串解析并按照数值来处理。这样做的原因是字符串相比数值型,数值在存储和处理时更快。

使用format选项来自定日期格式选择:

  • 使用预定义的日期格式
  • 设置自己定制的格式
curl -XPUT 'localhost:9200/get-together/_mapping/weekly-events' -d '{"weekly-events" : {"properties" : {"next_event" : {"type" : "date","format" : "MMM DD YYYY"}}}
}'curl -XPUT 'localhost:9200/get-together/weekly-events/1' -d '{"name" : "Elasticsearch News","first_occurence" : "2011-04-03","next_event" : "Oct 25 2013"
}'

4、布尔类型

boolean类型用于存储文档中的true/false(真/假)。值为true或者false的字段,会被自动映射为boolean,在Lucene的索引中被存储为代表true的T,或者代表false的F,es解析文档中的值,将true和false分别转化为T和F。

数组和多字段

1、数组

如果索引拥有多个值的字段,将这些值放入方括号中。无须手动映射定一个数组,映射会将多个值的字段定义为单个值所属的核心类型。所有核心类型都支持数组,无须修改映射,既可以使用单一值,也可以使用数组。对于Lucene内部而言,两者基本一致,在同一个字的中索引或多或少的词条,完全取决你提供了多少值。

curl -XPUT 'localhost:9200/blog/posts/1' -d '{"tags": ["first", "initial"]
}'curl -XPUT 'localhost:9200/blog/_mapping/posts?pretty'{"blog": {"mappings": {"posts": {"properties": {"tags": {"type": "string"}}}}}
}

2、多字段

数组允许使用同一个设置索引多项数据,多字段允许使用不同的设置,对同一项数据索引多次。无须重新索引数据,就能将单字段升级到多字段。多字段也允许在单一字段中拥有多个核心类型的值。

//要搜索analyzed版本的标签字段,就像搜索其他字段一样。如果要搜索not_analyzed版本的字段(仅仅精确匹配原有的标签),就要指定完整的路径:tags.verbatim。
curl -XPUT 'localhost:9200/blog/_mapping/posts' -d '{"posts": {"properties": {"tags": {"type": "string","index": "analyzed","fields": {"verbatim": {"type": "string","index": "not_analyzed"}}}}}
}'

使用预定义字段

更新现有文档

删除数据

小结

1、当多个类型种出现同样的字段名称时,两个同名的字段应该有同样的设置。否则es很难辨别你所指的是两个字段中的哪一个。两个字段都是属于同一个Lucene索引。比如:分组和活动文档中,出现了name字段,name字段应该是字符串的,不能一个是字符串一个是数值的。

2、使用类型划分同一索引中的数据。搜索可以在一个、多个或者所有类型中运行

3、为什么不能直接改变一个现有字段的映射?

想象一下以及索引了一个活动,某个字段是字符串,想要通过定义映射的方式,改变现有字段的映射,此时,es不得不改变该字段在现有文档中的索引方式。其实,编辑现存文档意味着删除和再次索引。正确的映射,理想情况下只需要增加,而无须修改。

4、索引过程和搜索过程的区别参考如下链接:

https://blog.csdn.net/wbiblem/article/details/72823779


http://chatgpt.dhexx.cn/article/Suhd7gaN.shtml

相关文章

动态更新索引

下一个需要被解决的问题是怎样在保留不变性的前提下实现倒排索引的更新? 答案是: 用更多的索引。 通过增加新的补充索引来反映新近的修改,而不是直接重写整个倒排索引。每一个倒排索引都会被轮流查询到--从最早的开始--查询完后再对结果进行合并。 Ela…

ES索引结构升级-笔记

ES中索引的字段类型是不可修改的,只能是重新创建一个索引并设置好mapping,然后再将老索引的数据复制过去 查看老索引mapping GET /twitter/_mappings创建new索引,并指定mapping PUT /twitter410{"mappings": {"properties&…

深耕ElasticSearch - 动态更新索引

文章目录 1. 建立索引2. 倒排索引的不变性3. 动态更新索引3.1 动态更新索引原理3.2 新增文档3.3 删除和更新文档 1. 建立索引 给定一个文档集合(这个集合中的文档是不变的),索引是如何建立起来的呢? 首先在内存里维护一个倒排索…

Solr 新增、更新、删除索引

solr-admin新增索引 [索引中无则新增,有则更新] 第一种方式&#xff1a;在doc标签和field标签中增加权重&#xff08;boost&#xff09;&#xff0c;增加权重后&#xff0c;可以在搜索的时候做权重过滤。 1 2 3 4 <delete> <query> id:"100861"<…

全文索引----solr服务器更新增量索引

上篇文章我们介绍了全量更新solr索引&#xff0c;但是在数据量较大时&#xff0c;频繁的更新索引会消耗系统性能&#xff0c;如果更新频率较低&#xff0c;则会影响短时的数据准确性&#xff0c;所以&#xff0c;更新时间的间隔是个很难界定。增量索引解决了这个问题&#xff0…

解决IDEA一直出现更新索引ideal Updating Indices: Indexing paused问题

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…

es 根据索引名称和索引字段更新值

1&#xff1a;指定索引名称和操作指令 instodayorder_new_2022/_update_by_query 2&#xff1a;执行代码 { "script": { "lang": "painless", "source": "if (ctx._source.reserveString_3 null) {ctx._source.reser…

es 修改(更新)索引模板

es 修改(更新)索引模板 es索引模板的好处就不用我多说了&#xff0c;我这里遇到的问题是&#xff0c;如何修改es模板&#xff0c;网上检索的关键词大多是新增/删除模板&#xff0c;我记录一下自己的修改模板操作吧&#xff08;我是在kibana的UI界面进行操作的&#xff09; 1.…

SQL 索引的操作 数据查询(1)数据更新

文章目录 索引的建立与删除建立索引修改索引删除索引 数据更新插入数据插入元组插入子查询结果 修改数据删除数据 数据查询单表查询查询经过计算的值选择表中的若干元组 索引的建立与删除 建立索引 在SQL语言中&#xff0c;建立索引使用 CREATE INDEX 语句&#xff0c;其一般…

Elasticsearch7.8.0版本进阶——动态更新索引

目录 一、如何在保留不变性的前提下实现倒排索引的更新二、按段搜索执行流程三、按段搜索的文档查询四、按段搜索的文档删除五、按段搜索的文档更新 一、如何在保留不变性的前提下实现倒排索引的更新 用更多的索引。通过增加新的补充索引来反映最近的修改&#xff0c;而不是直…

ElasticSearch 动态更新索引

Elasticsearch版本:2.x 1. 不变性 倒排索引被写入磁盘后是 不可改变(immutable):永远不会被修改。不变性有如下几个重要的优势: 不需要锁。如果你没有必要更新索引,你就没有必要担心多进程会同时修改数据。一旦索引被读入内核的文件系统缓存中,由于其不会改变,便会留在那…

MySQL:插入,更新与删除、索引

一、学习目标 掌握如何向表中插入数据掌握更新数据的方法熟悉如何删除数据掌握对数据表基本操作的方法和技巧了解什么是索引掌握创建索引的方法和技巧熟悉如何删除索引熟悉掌握索引的常见问题 二、实验内容 创建表books&#xff0c;对数据表进行插入、更新和删除操作&#x…

搜索引擎索引之如何更新索引

本文节选自《这就是搜索引擎&#xff1a;核心技术详解》第三章 动态索引通过在内存中维护临时索引&#xff0c;可以实现对动态文档和实时搜索的支持。但是服务器内存总是有限的&#xff0c;随着新加入系统的文档越来越多&#xff0c;临时索引消耗的内存也会随之增加。当最初分…

IDEA总是自动更新索引怎么解决

从File进入settings 搜索index_>修改右边的两个即可,点击OK保存即可

项目中如何使用ElasticSearch?变更数据时难道既更新数据库也要更新索引?这篇文章也许对你有点帮助(持续更新)

目录 1. 概述2.ElasticSearch的调试2.1 启动ES2.2 创建搜索的微服务2.3 使用logstash同步数据库数据到es的索引中 3.Linux系统下部署3.1 拉取es容器3.2 让9300端口可用3.3 安装ik分词器3.4 安装head-master3.5 配置logstash&#xff08;耗时最久&#xff09; 四. 出现的bug4.1 …

【Mysql】 sql语句实现update_or_create(唯一索引 ON DUPLICATE KEY UPDATE)

【Mysql】 on duplicate key update用法、优缺点以及使用案例 1. 应用场景&#xff1a; 导入数据功能&#xff0c;需要实现数据不存在时进行新建&#xff0c;有数据修改时则进行更新。在实现时&#xff0c;思路通常为先判断数据是新增还是更新&#xff0c;除了我们在代码层面实…

mysql-索引

1.索引的定义&#xff1a; 索引是帮助MySql高效获取数据的数据结构。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用数据&#xff0c;这样就可以在这些数据结构上实现高级查找算法&#xff0c;这种数据结构就是索…

mysql中的各种索引大总结

文章目录 为啥不用二叉搜索树&#xff1f;为啥不用平衡二叉&#xff08;avl&#xff09;树&#xff1f;为啥不用b-树&#xff1f;为啥用b树&#xff1f;&#xff08;重点&#xff09;索引聚簇索引聚簇索引的局限聚集的数据的优点非聚簇索引介绍组合索引覆盖索引前缀索引前缀索引…

MySQL索引的更新策略

对于数据的每一次更新&#xff0c;MySQL并不会每次都会更新索引(针对非唯一性索引而言)&#xff0c;索引的更新策略是这样的&#xff1a; 在InnoDB中&#xff0c;增删改都会立刻修改主键or唯一索引&#xff0c;但是不会rebuild全局索引&#xff0c;而是对这些索引增加值(或移除…

苹果各机型尺寸大小

//6.5英寸 #define iPhoneXSMax ([UIScreen instancesRespondToSelector:selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO) //6.1英寸 #define iPhoneXR ([UIScreen instancesRespondToSelector:selec…