认识es的多个维度

我们认识ES,认识到什么程度,会用到什么程度才算真正的认识呢。

我想我们可以从这几个角度去认识es
1.部署的角度
2.dsl,创建json格式,创建mapping,映射
3.springboot兼容es,使用java操作es
4.实际项目中es的具体接口。

1.部署的角度

我们这里要部署三个东西,es,kibana,还有ik分词器。
我这里简单解释一下,讲一下思路,具体的部署步骤,就不说了。

es就是也是一个数据库。就像mysql一样,不过mysql是存表,es是存很多的json。我们使用docker部署一下,让他运行,然后在他的文件夹的插件位置,装一个ik分词器的插件,让这个可以听的懂中文,对中文词组分词。
然后在安装一个kibana,这个就是,相当于mysql的navicat,不然,操作es只能在linux下的命令行沟通。

2.对于索引库和文档的认识

这个就相当于sql语句和mysql的关系

其实我觉得这个认识不是很准确。

我们知道一个json数据,他可以固定下来,当做mysql的表。然后在使用固定的格式,对这个json做一定的限制,可以让json的一些字段,被检索到。

我们看一个简单的demo;
说得对!咱们从零开始,一步一步来。我先纠正一个关键概念:


核心概念纠正

你说“索引库是针对文档(JSON)去处理的” → 不完全对!

更准确的说法:

  1. 索引库(Index) =数据库的表(Table)
  2. 文档(Document) =表中的一行记录(Row)
  3. Mapping=表的字段结构定义(Schema)

完整关系:

索引库(products) ├── Mapping(定义结构) │ ├── 字段1:name(类型:text) │ ├── 字段2:price(类型:float) │ └── ... └── 文档(具体数据) ├── 文档1:{"name":"华为手机", "price":6999} ├── 文档2:{"name":"iPhone", "price":8999} └── ...

分步教学:从零创建索引库

第1步:理解你要存什么数据

假设我们要存商品数据

{"id":"P1001","name":"华为Mate 60 Pro","price":6999.99,"stock":100,"is_online":true,"create_time":"2024-01-15"}

第2步:设计Mapping(字段类型)

思考每个字段应该用什么类型:

  • id:字符串,要精确匹配 →keyword
  • name:字符串,要能搜“华为”、“手机” →text(并用IK分词)
  • price:小数 →float
  • stock:整数 →integer
  • is_online:是/否 →boolean
  • create_time:日期 →date

第3步:创建索引库(在Kibana中操作)

打开Kibana→ 左侧菜单 →Dev Tools,输入:

// 创建名为 "products" 的索引库PUT/products{"mappings":{"properties":{"id":{"type":"keyword"},"name":{"type":"text","analyzer":"ik_max_word"},"price":{"type":"float"},"stock":{"type":"integer"},"is_online":{"type":"boolean"},"create_time":{"type":"date","format":"yyyy-MM-dd"}}}}

点击右边的三角形执行按钮,看到返回:

{"acknowledged":true,"shards_acknowledged":true,"index":"products"}

表示创建成功!


第4步:查看刚创建的索引库

// 查看索引库结构GET/products/_mapping

返回结果就是你刚才定义的mapping。


第5步:插入第一条数据

// 插入一个商品POST/products/_doc/1// _doc表示文档,1是文档ID{"id":"P1001","name":"华为Mate 60 Pro 智能手机","price":6999.99,"stock":100,"is_online":true,"create_time":"2024-01-15"}

返回:

{"_index":"products",// 存入哪个索引库"_id":"1",// 文档ID"result":"created"// 创建成功}

第6步:再插入几条数据

POST/products/_doc/2{"id":"P1002","name":"Apple iPhone 15 Pro","price":8999,"stock":50,"is_online":true,"create_time":"2024-01-10"}POST/products/_doc/3{"id":"P1003","name":"小米电视 75英寸","price":3999,"stock":30,"is_online":false,"create_time":"2024-01-05"}

第7步:查询数据

简单查询所有:
GET/products/_search{"query":{"match_all":{}}}
按名称搜索:
GET/products/_search{"query":{"match":{"name":"华为手机"// IK会自动分成"华为"和"手机"}}}
条件过滤:
GET/products/_search{"query":{"bool":{"must":[{"match":{"name":"电视"}}],"filter":[{"range":{"price":{"lte":5000}}},// 价格<=5000{"term":{"is_online":true}}// 已上架]}}}

我们进阶一下,创建索引库要有的完善的知识体系:

一、创建索引库的关键字全解

基本结构关键字

PUT/索引名{"settings":{// 索引设置(可选)"number_of_shards":3,// 分片数"number_of_replicas":1// 副本数},"mappings":{// 映射定义(核心)"properties":{// 字段定义开始"字段名":{"type":"字段类型",// 最重要的属性// 其他参数...}}}}

二、字段类型大全(最常用14种)

1. 字符串类型

类型用途示例
keyword精确匹配(不分词)
用于:ID、状态码、标签
"status": "published"
text全文搜索(要分词)
用于:文章内容、商品描述
"content": "这是一篇文章..."
text+fields同时支持分词和精确匹配见下面示例
// text 和 keyword 的区别示例"name":{"type":"text",// 可以搜"华为"、"手机""analyzer":"ik_max_word","fields":{"keyword":{// 可以精确匹配"华为Mate 60 Pro""type":"keyword","ignore_above":256// 超过256字符不索引}}}

2. 数字类型

类型范围用途
long-2⁶³ 到 2⁶³-1大整数:ID、数量
integer-2³¹ 到 2³¹-1整数:年龄、库存
short-32768 到 32767小整数:年份、状态码
byte-128 到 127微小整数:性别(0/1)
double双精度浮点高精度小数:科学计算
float单精度浮点普通小数:价格、评分
half_float半精度节省空间:0-1的评分
scaled_float缩放浮点货币:存储123.45存为12345
"price":{"type":"float"// 价格用float足够},"population":{"type":"long"// 人口数量用long},"rating":{"type":"half_float"// 评分4.5,节省空间},"salary":{"type":"scaled_float","scaling_factor":100// 存123.45实际存12345}

3. 日期类型

"create_time":{"type":"date","format":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"// 支持多种格式,自动识别}

常用格式:

  • "yyyy-MM-dd""2024-01-15"
  • "yyyy-MM-dd HH:mm:ss""2024-01-15 14:30:00"
  • "epoch_millis"→ 时间戳1705300200000

4. 布尔类型

"is_online":{"type":"boolean"}// 可接受值:true, false, "true", "false", "on", "off", "yes", "no"

5. 二进制类型

"file_data":{"type":"binary"}// 存Base64编码的二进制:图片、文件

6. 范围类型

"age_range":{"type":"integer_range"// 还有float_range, date_range等}// 数据:{"gte": 18, "lte": 60}

7. 对象类型

// 简单对象"user":{"type":"object","properties":{"first_name":{"type":"text"},"last_name":{"type":"text"},"age":{"type":"integer"}}}// 数据:{"user": {"first_name": "张", "last_name": "三", "age": 25}}

8. 嵌套类型(重要!)

"comments":{"type":"nested",// 保持数组内对象的独立性"properties":{"author":{"type":"keyword"},"content":{"type":"text"},"time":{"type":"date"}}}

为什么用nested?

// 没有nested时(错误):"comments":[{"author":"张三","content":"好"},{"author":"李四","content":"不好"}]// 搜"author:张三 AND content:不好" 会错误匹配!// 用nested时:每个评论对象独立,不会交叉匹配

9. 地理类型

"location":{"type":"geo_point"// 经纬度}// 数据:{"lat": 39.9042, "lon": 116.4074}// 或: "39.9042,116.4074"

10. IP类型

"ip_address":{"type":"ip"// IPv4或IPv6}// 数据:"192.168.1.1"

11. 数组类型

ES没有专门的array类型!任何字段都可以包含多个值:

"tags":{"type":"keyword"// 但可以存数组}// 数据:["手机", "旗舰", "5G"]

12. 自动补全类型

"suggest":{"type":"completion"// 搜索建议}

13. 分词计数类型

"word_count":{"type":"token_count",// 统计分词数量"analyzer":"standard"}// 统计"hello world" = 2个词

14. 附件类型(需要插件)

"attachment":{"type":"attachment"// 需要ingest-attachment插件}// 可以提取PDF、Word内容

三、完整的创建索引库示例

PUT/my_complete_index{"settings":{"number_of_shards":3,"number_of_replicas":1,"analysis":{"analyzer":{"my_ik":{"type":"custom","tokenizer":"ik_max_word"}}}},"mappings":{"properties":{// 字符串类"id":{"type":"keyword"},"title":{"type":"text","analyzer":"my_ik","fields":{"raw":{"type":"keyword"}}},// 数字类"price":{"type":"float"},"stock":{"type":"integer"},"rating":{"type":"half_float"},// 日期类"create_time":{"type":"date","format":"yyyy-MM-dd HH:mm:ss"},// 布尔类"is_online":{"type":"boolean"},// 对象类"author":{"type":"object","properties":{"name":{"type":"keyword"},"age":{"type":"byte"}}},// 嵌套类"comments":{"type":"nested","properties":{"user":{"type":"keyword"},"content":{"type":"text"}}},// 地理类"location":{"type":"geo_point"},// IP类"ip":{"type":"ip"},// 数组(用keyword存数组)"tags":{"type":"keyword"},// 范围类"age_range":{"type":"integer_range"},// 补全建议"suggest":{"type":"completion"}}}}

四、类型选择的黄金法则

场景应该用不要用
用户ID、状态码keywordtext
搜索文章内容text+ 分词器keyword
价格、评分floattext
库存、年龄integerfloat
创建时间datetext
是/否开关booleaninteger
商品规格数组nestedobject
用户位置geo_pointtext
IP地址ipkeyword

五、查询不同字段类型的示例

// 1. keyword精确匹配GET/index/_search{"query":{"term":{"status":"published"}// 完全匹配"published"}}// 2. text全文搜索GET/index/_search{"query":{"match":{"content":"华为手机"}// 搜"华为"或"手机"}}// 3. 数字范围查询GET/index/_search{"query":{"range":{"price":{"gte":100,"lte":1000}}}}// 4. 日期范围查询GET/index/_search{"query":{"range":{"create_time":{"gte":"2024-01-01","lte":"2024-01-31"}}}}// 5. 嵌套对象查询GET/index/_search{"query":{"nested":{"path":"comments","query":{"bool":{"must":[{"term":{"comments.user":"张三"}},{"match":{"comments.content":"好评"}}]}}}}}

六、快速参考表

类别常用类型关键参数
字符串text,keywordanalyzer,ignore_above
数字integer,float-
日期dateformat
布尔boolean-
对象object,nestedproperties
地理geo_point-
IPip-
数组任何类型都可以-
补全completion-

实战练习

在 Kibana 中创建这个索引库:

PUT/practice_index{"mappings":{"properties":{"student_id":{"type":"keyword"},"name":{"type":"text","analyzer":"ik_max_word"},"age":{"type":"integer"},"score":{"type":"float"},"is_graduated":{"type":"boolean"},"birthday":{"type":"date","format":"yyyy-MM-dd"},"courses":{"type":"nested","properties":{"course_name":{"type":"keyword"},"grade":{"type":"float"}}},"hobbies":{"type":"keyword"}}}}

然后插入数据、查询试试看!

记住:90%的场景只用前6种类型(text、keyword、integer、float、date、boolean),先掌握这些就够了!

对于es索引的操作,除了创建,还有:

以及有写入粒度,数据的认识:

好的,那么对于基本的部署es
以及操作es我们就有简单的认识和概念了。

感谢博主:https://blog.csdn.net/weixin_39932783/article/details/1390969727的分享

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

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

相关文章

深度学习毕设项目推荐-基于python深度学习的纸箱是否有破损识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

计算机深度学习毕设实战-基于python机器学习的纸箱是否有破损识别基于python深度学习的纸箱是否有破损识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

部署AI智能体的七个实战经验教训

部署AI智能体并非传统的软件发布&#xff0c;需要在实际操作中投入大量工作和规划才能让这些工具发挥生产力。顶层策略包括给予智能体一定的自由度&#xff0c;但不能过度放任&#xff0c;同时还需要重新思考传统的投资回报率衡量标准。有效的AI开发和管理需要在控制、投资、治…

无线网络仿真:6G网络仿真_(6).MAC层仿真

MAC层仿真 1. MAC层概述 1.1 MAC层的基本功能 在无线网络中&#xff0c;介质访问控制&#xff08;Medium Access Control, MAC&#xff09;层负责管理无线资源的分配&#xff0c;确保多个设备能够高效、有序地共享同一无线媒介。MAC层的主要功能包括&#xff1a; 帧的封装与解封…

CrowdStrike以4亿美元收购浏览器安全公司Seraphic

CrowdStrike Holdings Inc. 正在收购Seraphic Security Ltd.&#xff0c;这是一家帮助企业保护员工浏览器免受在线威胁的初创公司。两家公司今天宣布了这项交易&#xff0c;但没有披露财务条款&#xff0c;不过Calcalist网站估计收购金额为4亿美元。Seraphic在加利福尼亚州帕洛…

无线网络仿真:6G网络仿真_(7).网络层仿真

网络层仿真 1. 网络层的基本概念 网络层是无线网络仿真中一个非常重要的层次&#xff0c;它负责将上层的传输数据包从源节点路由到目的节点。网络层的主要功能包括路由选择、拥塞控制、流量管理等。在6G网络仿真中&#xff0c;网络层仿真不仅要考虑传统无线网络的特性&#xff…

谷歌重新拥抱被冷落的JPEG XL图像格式

谷歌已将JPEG XL&#xff08;JXL&#xff09;图像格式支持添加到开源Chromium代码库中&#xff0c;这一决定逆转了2022年放弃该技术的立场。最近的一次代码提交集成并启用了JXL解码器&#xff0c;这意味着未来发布的Google Chrome和其他基于Chromium的浏览器将包含处理和显示JX…

直接画圆或输入半径(关键字和选择状态并列)

if (pointResult.Status PromptStatus.Keyword) else if (pointResult.Status PromptStatus.OK){// 用户直接指定了点&#xff0c;使用默认半径画圆CreateCircle(db, ed, pointResult.Value, radius);}else{// 用户取消return;}public static void DrawCircleWithDirectOptio…

内存短缺意外带来好处:AI PC炒作降温

内存价格飙升对今年想要购买、组装或升级电脑的人来说是坏消息&#xff0c;但对那些厌倦了所谓"AI PC"宣传的人来说&#xff0c;这可能是个好消息。据Ars Technica报道&#xff0c;由生成式AI热潮推动的数据中心需求不断增长&#xff0c;导致内存和闪存芯片短缺&…

CAD倒圆角——CAD自带倒圆角 VS c#重写的倒圆角

经测试CAD2024中闭合多段线倒圆角&#xff08;半径1&#xff09;&#xff0c;效果如下&#xff1a;对比发现&#xff0c;这种情况CAD自身命令F P 选择多段线生成的倒圆角出现了bug&#xff0c; 通过重写倒圆角算法避免了此种bug出现。

急刹事件作为道路风险评估新指标研究

我们通过分析Android Auto收集的急刹事件&#xff08;HBEs&#xff09;与实际道路事故率之间的关系&#xff0c;确立了两者之间的正相关性。研究证实&#xff0c;急刹事件频率较高的道路段确实具有显著更高的事故风险&#xff0c;这表明此类事件可以作为道路安全评估的前瞻性指…

AI自适应降噪耳机改变听觉体验

在AI技术快速融入智能手机、笔记本电脑、平板电脑和耳机的竞赛中&#xff0c;最引人注目的AI功能通常会受到最多关注。当耳机使用AI进行实时翻译服务或支持免提访问生成式AI聊天机器人时&#xff0c;你会明显感知到。但还有一种你的耳机使用AI的方式&#xff0c;虽然不那么令人…

RS485 双串口通信 + LCD 实时显示(DMA版)

目录 一、前言二、DMA 通信核心原理简述三、CubeMX 的 DMA 串口配置四、FreeRTOS DMA 收发任务代码开发五、总结六、结尾 一、前言 前文我们已经完成了串口 RS485 通信的查询方式与中断方式开发&#xff0c;两种方式各有适配场景。本次笔记将在此基础上&#xff0c;讲解串口…

板凳----------(枯藤 )vs2026+win10(第六章-6)

《伤寒论》OCR 读书笔记项目的清晰小结&#xff0c;涵盖 安装步骤 代码调试关键点&#xff0c;方便复盘、备份或分享&#xff1a; &#x1f9e9; 一、整体目标 将扫描版 PDF《伤寒论》通过 OCR 自动识别 → 提取方剂组成 → 生成结构化 Markdown 笔记&#xff08;含口诀、比例…

“AI 电影,你敢买票吗?”——《团圆令》与《红孩儿》开启国产动画新赛道

随着人工智能&#xff08;AIGC&#xff09;技术的迅猛发展&#xff0c;国产动画电影正经历着一次颠覆性的变革。2025年12月20日&#xff0c;中国首部院线AIGC动画电影《团圆令》在北京举行点映礼&#xff0c;随后《红孩儿&#xff1a;赤焰之心》在上海松江举行开机仪式&#xf…

2026年计算机领域重点支持方向(参考)

截至2026年初&#xff0c;计算机及相关技术领域在中国正处于“十四五”收官、“十五五”开启的关键节点。一、2026年国家政策重点支持方向 ✅ 1. 人工智能&#xff08;AI&#xff09;与大模型 政策依据&#xff1a;《新一代人工智能发展规划》持续深化&#xff1b;2026年中央经…

新年氛围营造:新疆/西藏/甘肃/青海购物中心美陈设计公司盘点

当新年的脚步踏遍西北大地&#xff0c;新疆的丝路驼铃、西藏的雪域风情、甘肃的敦煌文脉、青海的河湟古韵&#xff0c;都在购物中心这个城市核心场景中寻找新的表达。作为节日氛围营造的关键载体&#xff0c;美陈设计早已跳出 “静态装饰” 的局限&#xff0c;成为融合地域文化…

压测 把自己 压进去了

凌晨一点&#xff0c;城中村的出租屋里&#xff0c;只有电脑屏幕的蓝光映着小李的脸。作为一名自由后端开发者&#xff0c;他不用受公司制度约束&#xff0c;日常接些接口开发、bug修复的散活&#xff0c;大把空闲时间都耗在了钻研技术上——而压测各类接口&#xff0c;成了他藏…

全网最全9个AI论文网站,专科生毕业论文轻松搞定!

全网最全9个AI论文网站&#xff0c;专科生毕业论文轻松搞定&#xff01; AI 工具如何助力论文写作&#xff0c;让专科生轻松应对毕业挑战 在当前的学术环境中&#xff0c;越来越多的专科生开始借助 AI 工具来提升论文写作效率。尤其是那些对写作技巧不熟悉、时间紧张的学生来说…

《创业之路》-852- 价值投资者的七步法:如何系统地看懂一个企业

价值投资者要真正“看懂一个企业”&#xff0c;不仅仅是看财务报表或估值数字&#xff0c;而是要深入理解企业的本质、护城河、管理层、商业模式和长期前景。正如巴菲特所说&#xff1a;“用合理的价格买入一家伟大的企业&#xff0c;远胜于用便宜的价格买入一家平庸的企业。”…