ElasticSearch索引库操作 - 努力-

news/2025/11/22 20:05:44/文章来源:https://www.cnblogs.com/kongsq/p/19258494

  一、ElasticSearch基础概念


1.1 文档和字段:


  ElasticSearch是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在ElasticSearch中。
  原本数据库中的一行数据就是ES中的一个JSON文档;而数据库中每行数据都包含很多列,这些列就转换为JSON文档中的字段(Field)。

1.2 索引和映射:


  索引(index):相同类型的文档的集合。
  映射(mapping):索引中文档的字段约束信息,类似表的结构约束。

1.3 正向索引和倒排索引:


  什么是正向索引?
    基于文档id创建索引。根据id查询快,但是查询词条时必须先找到文档,而后判断是否包含词条。
  什么是倒排索引?
  对文档内容分词,对词条创建索引,并记录词条所在文档的id。查询时先根据词条查询到文档id,而后根据文档id查询文档。

  ElasticSearch结合kibana、Logstash、Beats,是一整套技术栈,被叫做ELK。被广泛应用在日志数据分析、实时监控等领域。

  二、普通分词器和IK分词器


  倒排索引的关键就是要对文档分词得到词条,然后对词条创建索引。而中文分词往往需要根据语义分析,比较复杂,这就需要用到中文分词器,例如IK分词器。

2.1 默认分词器


  使用默认分词器(标准分词器),会对对中文会一个个字切分,没有中文语义,形成不了有效的词条。
  使用默认分词器:

 

POST /_analyze
{"analyzer": "standard","text": "我要去学习java!太棒了!"
}

 


2.2 IK分词器


中文分词器:IK分词器。
IK分词器包含两种模式:

  ik_smart:智能语义切分 。
  ik_max_word:最细粒度切分 。
ik 分词器包含两种模式:
  ik_smart(最大粒度:按照最长的词条进行分词;更适合搜索的时候)。
  ik_max_word(最细粒度:按照最短的词条进行分词,分的词条会比较多;更适合在创建索引的时候使用)。

使用IK分词器:

 

POST /_analyze
{"analyzer": "ik_smart","text": "我要去学习java!太棒了!"
}POST /_analyze
{"analyzer": "ik_max_word","text": "我要去学习java!太棒了!"
}

 

 

  分词器的作用是什么?
  创建倒排索引时,对文档分词。用户搜索时,对输入的内容分词。

 

  三、索引库操作


3.1 Mapping映射属性


Mapping是对索引库中文档的约束,常见的Mapping属性包括:

  type:字段数据类型,常见的简单类型有:
    字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)。
    数值:long、integer、short、byte、double、float。
    布尔:boolean。
    日期:date。
    对象:object。
  index:是否创建索引,默认为true。
  analyzer:使用哪种分词器。
  properties:该字段的子字段。


对应的每个字段映射(Mapping):

ES1-1

 

 


3.2 索引库操作


  Elasticsearch采用的是Restful风格的API,因此其请求方式和路径都比较规范,而且请求参数也都采用JSON风格。我们使用Kibana的DevTools来编写请求。

1. 创建索引库和映射

 

基本语法:

请求方式:PUT
请求路径:/索引库名,可以自定义
请求参数:mapping映射

PUT /testMapping
{"mappings": {"properties": {"info":{"type": "text","analyzer": "ik_smart"},"email":{"type": "keyword","index": false},"name":{"properties": {"firstName":{"type": "keyword"},"lastName":{"type": "keyword"}}}}}
}

 

 

2. 查询索引库


基本语法:

请求方式:GET
请求路径:/索引库名
请求参数:无


示例:

 

GET /testMapping

 


3. 修改索引库


  倒排索引结构虽然不复杂,但是一旦数据结构改变(比如改变了分词器),就需要重新创建倒排索引。因此索引库一旦创建,无法修改mapping。

  虽然无法修改mapping中已有的字段,但是却允许添加新的字段到mapping中,因为不会对倒排索引产生影响。因此修改索引库能做的就是向索引库中添加新字段,或者更新索引库的基础属性。

示例:

 

#对原有的映射添加域(field)
PUT /testMapping/_mapping
{"properties":{"age":{"type": "integer"}}
}

 


4. 删除索引库


语法:

请求方式:DELETE
请求路径:/索引库名
请求参数:无
示例:

DELETE /testMapping

 


  四、文档操作


4.1 新增文档


语法:

POST /索引库名/_doc/文档id
{"字段1": "值1","字段2": "值2","字段3": {"子属性1": "值3","子属性2": "值4"},
}

 


示例:

 

# 新增文档
POST /testMapper/_doc/1
{"info": "IT讲师","email": "zy@163.cn","name": {"firstName": "云","lastName": "赵"}
}

 

 

4.2 查询文档


查询一般都需要条件,这里我们把文档id带上。

语法:

GET /{索引库名称}/_doc/{id}

 


示例:

GET /testMapper/_doc/1

 


4.3 删除文档


删除使用DELETE请求,同样,需要根据id进行删除。

语法:

DELETE /{索引库名}/_doc/id值

 


示例:

 

DELETE /testMapper/_doc/1

 


4.4 修改文档


修改有两种方式:

  全量修改:直接覆盖原来的文档。
  局部修改:修改文档中的部分字段。
1、全量修改

全量修改是覆盖原来的文档,其本质是两步操作:

  根据指定的id删除文档。
  新增一个相同id的文档。
注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。

语法:

PUT /{索引库名}/_doc/文档id
{"字段1": "值1","字段2": "值2",// ... 略
}

 

 


示例:

 

PUT /testMapper/_doc/1
{"info": "IT讲师","email": "zy@163.cn","name": {"firstName": "云","lastName": "赵"}
}

 

2、 局部修改

局部修改是只修改指定id匹配的文档中的部分字段。

语法:

POST /{索引库名}/_update/文档id
{"doc": {"字段名": "新的值",}
}

 

示例:

 

POST /testMapper/_update/1
{"doc":{"email":"ZhaoYun@163.cn"}
}

 


4.5、文档批处理操作


批处理采用POST请求,基本语法如下:

 

POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

 


其中:

  -index代表新增操作:
    _index:指定索引库名。
    _id指定要操作的文档id。
    { “field1” : “value1” }:则是要新增的文档内容。
  -delete代表删除操作:
    _index:指定索引库名。
    _id指定要操作的文档id。
  -update代表更新操作:
    _index:指定索引库名。
    _id指定要操作的文档id。
    { “doc” : {“field2” : “value2”} }:要更新的文档字段。


注意:index 之后的数据要写在一行。

示例,批量新增:

POST /_bulk
{"index":{"_index":"testMapper", "_id":3}}
{"info":"IT讲师", "email":"ww@163.cn","name":{"firstName":"王", "lastName":"五"}}
{"index":{"_index":"testMapper", "_id":4}}
{"info":"IT助教", "email":"zs@163.cn","name":{"firstName":"张", "lastName":"三"}}

 


批量删除:

 

POST /_bulk
{"delete":{"_index":"testMapper", "_id":3}}
{"delete":{"_index":"testMapper", "_id":4}}

 

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

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

相关文章

2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐。

2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐。2025年集成房屋设计公司十大排名,岗亭加工厂家十大排行榜,专业岗亭定制工厂怎么选?彩钢移动厕所厂家推荐…

洛谷 P5658 [CSP-S 2019] 括号树 题解

题目大意 给定一棵树,每个节点有一个括号。对于每个节点 \(i\),定义 \(s_i\) 为从根节点到 \(i\) 的路径上所有括号按顺序组成的字符串。求每个 \(s_i\) 中互不相同的合法括号子串的个数 \(k_i\)。 思路 首先,\(k_i…

礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达

礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达礼盒拖车公司推荐,礼盒拖车定制公司排行榜,礼盒拖车厂家口碑推荐,礼盒拖车生产厂家-航利通达在当下这个视觉至上的时代…

360笔试

看到 PC 客户端对 ACMer 有加分项,就投了下这个。 \(2\) 个小时,前面有 \(40\) 道选择题,涉及内容包含数学、数据结构、操作系统、网络安全,还有一些关于 C++ 的类什么的和一些简单算法的原理什么的,不过前面那些…

图像的颜色模式

图像的颜色模式0.1 灰度模式 也就是灰度图(黑白照片),每个像素只有明暗变化,用0~255共256个亮度级来表示,用8个bit来表示,所以每个像素信息用8bit储存. 0.2 位图模式(二值图像) 即只有纯黑和纯白两种亮度,没有渐变…

.NET+AI | MEAI | Function Caling 实操(4)

.NET+AI | MEAI | Function Caling 实操 TL;DR✅ 注册你的方法为工具(Tool) ✅ 启用中间件 UseFunctionInvocation() ✅ 设置 ChatOptions.ToolMode = Auto ✅ 发起对话,MEAI 自动完成:请求 → 调用 → 回填 → 作…

高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性元器件公司客户推荐,电感器公司产能排名,线圈公司行业排名-汉翔电子

高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性元器件公司客户推荐,电感器公司产能排名,线圈公司行业排名-汉翔电子高频变压器公司口碑榜单,电感公司技术排名,电感厂家交付效率排名,磁性…

noip13

11.2211.22 颓死了,不想改。 t1 场切。 观察大样例大胆猜测答案很小(实际上答案不超过6,伏笔)。 然后手模inf组数据即可发现结论。 将每个数在这几步中每次选几个看成 \(x\) 进制数 (\(x=a_{i+1}/a_i\)) ,而 \(x^…

高频变压器厂家,电感生产厂家,磁性元器件源头厂家推荐,滤波器生产厂家有哪些,高频变压器公司排行榜,高频变压器公司交付效率排名,高频变压器公司小型化解决方案

高频变压器厂家,电感生产厂家,磁性元器件源头厂家推荐,滤波器生产厂家有哪些,高频变压器公司排行榜,高频变压器公司交付效率排名,高频变压器公司小型化解决方案高频变压器厂家,电感生产厂家,磁性元器件源头厂家…

Java中HashMap的核心原理与使用注意事项

大家好,我是一名正在实习的Java开发。最近在参与项目迭代时,遇到了一个很棘手的问题:线上环境有个接口偶尔会出现响应超时,排查了半天才发现,原来是并发场景下误用了HashMap导致的哈希冲突恶化,查询性能直接从O(…

MinIo介绍 - 努力-

MinIo介绍MinIo介绍,文件存储一、 MinIO介绍MinIO作为文件存储的软件,这是一个基于Go编写的开源对象存储套件,虽然轻量,却拥有着不错的性能。  MinIO非常适合于存储大容量非结构化的数据,例如图片、视频、日志文…

BLOG1

一、前言 知识点覆盖:三次作业逐步引入了类的封装与继承、集合框架(ArrayList、HashSet、Deque等)的应用、单一职责原则(SRP)的实践、请求队列的管理、调度算法的优化,以及输入输出的高效处理。此外,还涉及边界…

host with linux

在 Linux 系统中,"host" 通常指的是 主机(主机名),即一个计算机的名称。在 Linux 系统中,主机名可以通过 hostname 命令查看或修改。一、查看当前主机名hostname或者echo $HOSTNAME这两个命令的功能是一…

深入解析:算法基础篇(8)贪心算法

深入解析:算法基础篇(8)贪心算法2025-11-22 19:33 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !imp…

详细介绍:【STM32】工程文件管理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

南昌航空大学-ptajava

前言 本次对PTA作业进行总结,共三道Java大题,为电梯调度程序的迭代开发。涉及到基础Java语言的运用,look电梯调度算法的实现,队列结构的使用,枚举类型运用,类设计,迭代开发能力等知识点。 第一次作业:单部电梯…

sguardsvc64.exe(Anti-Cheat Expert)驱动不兼容导致无法开启“内核模式硬件强制堆栈保护”或“内存完整性”

windows安全感中心,有时候会提示无法开启“内核模式硬件强制堆栈保护”或“内存完整性”。打开详情会显示sguardsvc64.exe的原因,这个其实是腾讯反作弊系统相关的文件。大概率你是一个腾讯游戏玩家。刚开始网上搜索如…

Wi-Fi FTM 技术 10 年后展望

1. 技术成熟背景 假设 10 年后,全球 Wi-Fi AP 生态全面升级,所有 AP 都支持 IEEE 802.11mc/ax FTM 功能,同时绝大多数智能手机和平板、IoT 设备也原生支持 FTM 测距。这意味着:用户设备无需额外硬件即可实现高精度…

Docker使用【镜像】 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20251122

在我的世界forge版本的mod开发中,虽然总体逻辑不难,但要记住的方法和类名一大堆,要是想上手得多写多看啊