Elasticsearch面试题总结

1.为什么要使用Elasticsearch?

  当我们在商城中使用搜索功能时,随着后期项目数据量的不断增大,如果我们继续使用以前数据库模糊查询的方式去查询数据,在百万数据量的情况下,效率非常低下;而Es是一种支持全文检索的框架,特点是可以实时存储和实时分析搜索引擎,并且当我们数据量很大的时候可以集群,所以我们使用搜索功能时,可以把商品常用的名称,价格,描述,id等信息存储到索引库中,查询的时候可以提高查询速度。


2.elasticsearch 了解多少,说说你们公司 es 的集群架构,索引数据大小,分片有多少,以及一些调优手段

 es 生产集群我们部署了 2台机器,每台机器是 6 核 64G 的,集群总内存是 128G。

我们 es 集群的日增量数据大概是 1000 万条,每天日增量数据大概是 200MB,每月增量数据大概是 3 亿,8G。

目前线上有 5个索引,每个索引的数据量大概是 10G,所以这个数据量之内,我们每个索引使用的是默认的5个shard(分片)。


调优手段一般是从三个方面去考虑的:

1.在设计阶段的时候 使用别名进行索引管理,每天凌晨定时对索引进行force_merge操作,针对合理的字段设置分词器

2.在写入的前,副本数设置为0并且禁用刷新机制,写入过程中,采用bulk批量写入;写入后恢复副本数和刷新间隔。

3,在查询的时候利用倒排索引机制,尽量使用keyword类型。


3、elasticsearch 的倒排索引是什么

我们传统的检索方式是通过遍历整篇文章,逐个比对找到对应的关键词位置,而倒排索引是通过分词策略,形成词和文章的关系映射表,这种词典+映射表的方式就是倒排索引,有点类似于我们以前使用的新华字典。倒排索引可极大的提高查询效率。


4.elasticsearch 索引数据多了怎么办,如何调优,部署

1.在设计的时候可以基于模板+时间滚动方式创建索引,每天递增数据,避免单个索引很大的情况出现。

2.在存储的时候,冷热数据分开存储,比如最近3天的数据作为热数据,其他的作为冷数据,冷数据的话,由于不会再写入新数据了,可以考虑定期force_merge(强制合并)和shrink(压缩)的方式进行处理,节约空间和检索效率

3.由于es支持动态扩展,所有可以多加几台机器来缓解集群压力。


5.elasticsearch 是如何实现 master 选举的

前置条件:

(1)只有候选主节点(master:true)的节点才能成为主节点。

(2)最小主节点数(min_master_nodes)的目的是防止脑裂。

实现步骤

第一步:确认候选主节点数达标,就是我们在Es.yml 设置的值

第二步:比较:先判定是否具备 master 资格,具备候选主节点资格的优先返回;

若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。

补充:master 节点的职责主要包括集群、节点和索引的管理,不负责文档级

别的管理;data 节点可以关闭 http 功能。



6.详细描述一下 Elasticsearch 索引文档的过程

这里的索引文档应该理解为文档写入 ES,创建索引的过程

第一步:客户从集群某节点写入数据,发送请求。(如果没有指定路由/协调节点,

请求的节点扮演路由节点的角色。)

第二步:节点 1 接受到请求后,使用文档_id 来确定文档属于分片 0。而分片0属于节点3,请求会被转到节点 3。分片 0 的主分片也分配到节点 3 上;

第三步:节点 3 在主分片上执行写操作,成功后将请求并行转发到节点1和节点 2 的副本分片上。所有的副本分片都报告成功,节点3将向协调节点(节点 1)报告成功,节点 1 向请求客户端报告写入成功。

如果面试官再问:第二步中的文档获取分片的过程?

回答:借助路由算法获取,路由算法就是根据路由和文档 id 计算目标的分片id




7、Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法

1、关闭缓存 swap;

2、堆内存设置为:Min(节.点内存/2, 32GB);

3、设置最大文件句柄数;



8、lucence 内部结构是什么(待补充)

lucence 的核心分为:索引创建,索引搜索;


9、Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?

这个主要是会涉及到脑裂的问题。

1、当集群 master 候选数量大于等于 3 个时,可以通过设置最少投票通过数量

(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解

决脑裂问题;

2、当候选数量为两个时,只能修改其中一个为master 候选,其他作为 data

节点,避免脑裂问题




10、客户端在和ES集群连接时,如何选择特定的节点执行请求的?

客户端是通过transport 模块远程连接一个 elasticsearch 集群。它并不加入到集群中,只是简单的获得一个或者多个初始化的 transport 地址,并以 轮询 的方式与这些地址进行通信。


11.详细描述一下 Elasticsearch 更新和删除文档的过程

删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不能被删除或者改动。我们在执行删除的时候,其实不是真正的删除了这个文档,因为磁盘上每一个段都有一个.del文件,删除的时候会把文档 在.del文件标记为已删除,但是在匹配查询的时候依旧能匹配到,只是会在结果中把它过滤掉。更新也是一样的,也会把旧的文档在.del文件中标记为已删除,但是查询结果中也是能查到,只是在结果中会把标记了已删除的文件过滤掉。




12.详细描述一下 Elasticsearch 搜索的过程

在搜索的时候,因为我们不知道对应的查询会在哪些文档里命中,所以我们查询索引中所有的分片。由于数据在每个分片中的排列并不等于在整个索引中的排列,因此有了如下两个阶段:查询阶段和取回阶段(query then fetch),客户端发送请求到某一个节点,这个节点会根据文档id去匹配所有相应的分片并给每一个分片发送请求,接着会进行取回操作,所有分片查询完后把结果返回到这个节点进行整理,最后返回给客户端查询结果。

参考文档:https://www.jianshu.com/p/7ce8891d6972


13.在 Elasticsearch 中,是怎么根据一个词找到对应的倒排索引的?

首先我们应该了解一下什么是倒排索引,倒排索引就是通过分词策略把分词和文章形成一个关系映射表,这种词典和映射表的方式就是我们的倒排索引,所以当我们去检索一个词语的时候,会根据文档id去整个索引库中去查询到匹配的索引,然后返回给客户端。




14、对于 GC 方面,在使用 Elasticsearch 时要注意什么?

了解了JVM后再来~


15.Elasticsearch 对于大数据量(上亿量级)的聚合如何实现?

Elasticsearch 提供的首个近似聚合是 cardinality 度量。它提供一个字段的基数,即该字段的 distinct 或者 unique 值的数目。它是基于HLL算法的。HLL 会先对我们的输入作哈希运算,然后根据哈希运算的结果中的bits做概率估算从而得到基数。

16、在并发情况下,Elasticsearch 如果保证读写一致?

1、可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;

2、另外对于写操作,一致性级别 默认是只有当大多数分片可用时才允许写操作。如果因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。

3、对于读操作,可以通过设置 replication 保证操作在主分片和副本分片都完成后才会返回;也可以通过设置搜索请求参数来查询主分片,确保文档是最新版本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容