【面试】面试官:请举例回答Elasticsearch的数据模型有哪些核心概念?

文章目录

      • [1. Elasticsearch的数据模型有哪些核心概念?](#1. Elasticsearch的数据模型有哪些核心概念?)
      • [2. Elasticsearch如何确保数据的一致性和可靠性?](#2. Elasticsearch如何确保数据的一致性和可靠性?)
      • [3. Elasticsearch的中文分词机制是如何实现的?](#3. Elasticsearch的中文分词机制是如何实现的?)
      • [4. Elasticsearch有哪些分片策略?如何设定分片数量和副本数量?](#4. Elasticsearch有哪些分片策略?如何设定分片数量和副本数量?)

今天咱们来聊聊ES的那些事儿。
想象一下,ES就像一个超级聪明的图书馆管理员,它能帮你快速找到任何书(数据),还能保证书不丢、不乱。
现在,咱们一个一个来解答问题。

1. Elasticsearch的数据模型有哪些核心概念?

ES的数据模型就像一座图书馆,核心概念有这几个:

  • 索引(Index):相当于图书馆的一个书架,专门放一类书。比如,你建一个"用户信息"索引,就放所有用户数据。
  • 文档(Document) :书架上的每本书,就是一条数据记录,用JSON格式存储。例如,一个用户文档:{"name": "张三", "age": 30}
  • 字段(Field):书里的章节标题,比如"name"或"age",每个字段有类型(如文本、数字)。
  • 映射(Mapping):图书馆的目录系统,定义每个字段的类型和规则。比如,提前说好"age"是数字类型,不能乱填成文字。
  • 分片(Shard):书架太大?分成几个小隔层!分片是索引的物理分区,帮助分散存储和查询压力。
  • 副本(Replica):每个分片的备份副本,就像复印了一本书放在另一个书架,防止原书丢了。

案例 :想象你是个吃货,建了个"美食索引"。

文档就是菜谱(如{"菜名": "红烧肉", "难度": "中等"}),字段是"菜名"和"难度",映射确保"难度"不是数字(否则系统会懵:为啥"中等"等于 5 5 5?)。

分片:把菜谱分成"川菜"和"粤菜"两个隔层。

副本:万一川菜隔层着火,副本能顶上------保证你还能查到"麻婆豆腐"的配方!

2. Elasticsearch如何确保数据的一致性和可靠性?

ES像个超级靠谱的快递员,保证数据不丢、不乱。

核心机制是:

  • 副本机制:每个分片都有一个或多个副本(replica)。写数据时,先写到主分片,然后异步同步到副本。这样,就算一台服务器挂了,副本顶上,数据还在。
  • 一致性模型:默认是最终一致性(数据稍后同步),但你可以调成强一致性(比如写操作必须等所有副本确认)。版本控制(每个文档有版本号)防止冲突。
  • 可靠性保障:集群健康监控(如"green"状态表示一切正常),加上事务日志(translog)记录写操作,万一崩溃,能恢复数据。

案例 :假设你在网上卖奶茶订单。写一个新订单时,ES先让主分片(好比总店)记录,然后悄悄告诉副本分片(分店):"嘿,有杯珍珠奶茶!"如果总店停电,分店立马接手,顾客不会发现异常。

一致性:默认是"最终一致"------订单可能延迟1秒显示,但你可以设置成"强一致":顾客必须等所有分店都点头才下单,免得出现"我要少糖"变成"多糖"的悲剧(版本号防错)。

可靠性:ES有自检系统,天天"体检",确保数据99.999%不丢------比我的减肥计划还可靠!

3. Elasticsearch的中文分词机制是如何实现的?

中文分词就像把一句话切成单词,ES靠分词器(Tokenizer)实现。核心是:

  • 分词过程:输入中文文本 → 分词器切成词条(token) → 过滤停用词(如"的"、"是") → 标准化(如转小写) → 索引存储。
  • 常用中文分词器
    • IK Analyzer:最流行,支持细粒度切分。比如"我爱北京天安门"切成"我"、"爱"、"北京"、"天安门"。
    • SmartCN:官方自带,基于词典,适合简单场景。
    • 自定义词典:你可以加新词,比如"奥利给"当做一个词。
  • 底层原理:基于词典匹配或机器学习算法,识别词语边界。计算词频时,用TF-IDF公式(但咱们不深究数学)。

案例 :你发帖"今天天气真好,适合打篮球"。ES用IK Analyzer分词:先切成"今天"、"天气"、"真好"、"适合"、"打篮球"。过滤掉"适合"(停用词),索引时只存关键词。如果没分词器,ES可能把"打篮球"切成"打"和"篮球",结果搜索"篮球"时冒出"打架"内容------乱套了!

好在IK Analyzer聪明,知道"打篮球"是一个整体。

自定义词典:加个"yyds"(永远的神),它就不会切成"y"、"y"、"d"、"s"了。

试试看,输入"ES yyds",它懂你的意思!

4. Elasticsearch有哪些分片策略?如何设定分片数量和副本数量?

分片策略是ES的"分家艺术",避免数据堆成山。核心策略:

  • 分片策略
    • 静态分片:创建索引时固定分片数,之后不能改。ES默认一个索引有5个主分片(primary shard)。
    • 动态调整:副本数(replica)可以随时改(比如从1加到2)。
    • 路由策略:数据分配到分片时,基于文档ID哈希计算,确保均匀分布。
  • 如何设定数量
    • 分片数 :基于数据量和性能。经验法则:每个分片大小在 10 GB 10\text{GB} 10GB到 50 GB 50\text{GB} 50GB之间。计算方式:预估总数据量除以 30 GB 30\text{GB} 30GB(取上限)。分片太多浪费资源,太少查询慢。
    • 副本数:至少1个(保证高可用),通常设1-2个。根据集群节点数调整------节点多,副本可增加。
    • 设定步骤 :创建索引时指定,比如PUT /my_index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 } }

案例 :想象你开个网店,索引是"商品库"。分片策略?别把所有鸡蛋放一个篮子!数据量大时,比如有 10000 10000 10000件商品,每个分片 30 GB 30\text{GB} 30GB,算算: 10000 × 0.1 KB ≈ 1 GB 10000 \times 0.1\text{KB} \approx 1\text{GB} 10000×0.1KB≈1GB(假设每件商品数据小),那么分片数设1个就够了;但如果商品图片多,总数据 100 GB 100\text{GB} 100GB,分片数就设 4 4 4( 100 / 30 ≈ 3.33 100 / 30 \approx 3.33 100/30≈3.33,取整)。

副本数:设1个,相当于雇了个备份店员。如果搞错策略------分片太少,查询时像排队结账,慢得要命;分片太多,系统忙得团团转,像无头苍蝇。

设定时记住:分片数是"一锤子买卖",副本数可灵活调。

下次建索引,先算算数据体积,别让ES"消化不良"哦!


好了,朋友们,ES的核心概念就聊到这里!

记住,ES是个聪明又可靠的伙伴,用好它,你的数据管理就能像吃火锅一样爽快------啥菜都能捞到!😊

相关推荐
皮皮林5519 分钟前
设计一个多租户 SaaS 系统,如何实现租户数据隔离与资源配额控制?
java·saas
霍格沃兹软件测试开发10 分钟前
Playwright 自动化测试系列(6)| 第三阶段:测试框架集成指南:参数化测试 + 多浏览器并行执行
java·数据库·mysql·自动化
cui_win42 分钟前
kafka 生产和消费 性能测试工具 kafka-producer-perf-test.sh kafka-consumer-perf-test.sh
分布式·测试工具·kafka
Bonnie_12151 小时前
02-netty基础-java四种IO模型
java·开发语言·nio·jetty
我不是星海1 小时前
建造者设计模式
java·开发语言
JIngJaneIL1 小时前
健身管理小程序|基于微信开发健身管理小程序的系统设计与实现(源码+数据库+文档)
java·数据库·小程序·论文·课程设计·毕设·健身管理小程序
Dcs1 小时前
Spring Framework 6.2 正式发布:开发者最值得关注的更新全览!
java
别来无恙1491 小时前
Spring Boot自动装配原理深度解析:从核心注解到实现机制
java·spring boot·后端
亲爱的非洲野猪1 小时前
Spring Cloud Gateway 电商系统实战指南:架构设计与深度优化
java·spring cloud·gateway
[听得时光枕水眠]1 小时前
Gateway
java·开发语言·gateway