文章目录
-
-
- 1.Elasticsearch 可以帮助我们做什么?
- 1.什么是ElasticSearch?
- 1.为什么要使用Elasticsearch?
- 1.Elasticsearch中的倒排索引是什么?
- 1.索引、类型、文档
- 1.映射是什么?
- 1.ElasticSearch中的集群、节点是什么?
- 1.分片是什么?
- 1.副本
- 1.集群演示
- 1.ES的数据在内存还是在磁盘?
- 1.了解一下ES的“不可变”
- 1.文档删除
- 1.文档刷新、文档合并
- 1.文档冲突
- 1.文档展示
- 1.ElasticSearch优化方式
- 2.Raft协议选举算法
- 2.Zookeeper的选举算法是什么?
- 2.Elasticsearch是如何实现Master选举的?
- 2.Elasticsearch 集群脑裂问题?
- 2.Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
- 2.详细描述一下Elasticsearch索引文档的过程。
- 2.详细描述一下Elasticsearch更新和删除文档的过程
- 2.详细描述一下Elasticsearch搜索的过程
- 2.在并发情况下,Elasticsearch 如果保证读写一致?
- 2.如何监控 Elasticsearch 集群状态?
- 2.Elasticsearch 与 solr 的区别?
-
1.Elasticsearch 可以帮助我们做什么?
- 实现各种网站的关键词检索功能,比如电商网站的商品检索、维基百科的词条搜索、Github 的项目检索;
- 本地生活类 APP 比如美团基于你的定位实现附近的一些美食或者娱乐项目的推荐;
- 结合 Elasticsearch、Kibana、Beats 和 Logstash 这些 Elastic Stack 的组件实现一个功能完善的日志系统。
1.什么是ElasticSearch?
Elasticsearch是一个基于Lucene
的搜索引擎
。具有良好的全文搜索功能
。
Lucene是apache的一个开放源代码的全文检索引擎工具包
1.为什么要使用Elasticsearch?
在百万级别的数据库中,使用模糊查询
来查询某个字段,这就会导致导致商品查询是全表扫面
,效率非常低下,
ElasticSearch使用了倒排索引
,倒排索引以关键字为key,然后value中记录了这个关键字的位置信息,就可以实现快速查询。
1.Elasticsearch中的倒排索引是什么?
倒排索引以关键字为key,然后value中记录了这个关键字的位置信息,就可以实现快速查询。
倒排索引涉及到分词,面试官很可能问到你分词;而且倒排索引中极可能问到你词条、词典、倒排表
分词:我们要用分词器,比如常见的IK中文分词器,作为插件来使用,在里面我们还可以自定义词典(比如人名什么的,防止错误分词)
分词设置:我们可以设置类型为keyword或text来说明该词能不能进行分词(keyword类型的不能被分词,text类型的可以被分词)
词条:索引中最小存储和查询单元(英文中词条一般就是一个单词,中文中一般就是一个词组)
词典:是词条的集合。它的底层是B+树或Hash表
倒排表:以关键字为key,然后value中记录了这个关键字的位置信息,比如“zhangsan:101 109 106 108”是一个倒排项,倒排表自然就是倒排项的集合了
1.索引、类型、文档
以前是索引———类型————文档
类比于 数据库——数据表———数据
你可以觉得文档听起来不比类型的范围大吗,类型听起来不比索引的范围大吗?事实上,它就像“共和国”和“中华人民共和国”的范围一样,共和国肯定包括中华人民共和国,文档它就是一张精确的表,一个类型下面肯定有很多个文档,同样的一个索引下面有一堆类型。
从7.0版本以后不再有"类型
"的说法了,文档就是直接存储在索引下面
1.映射是什么?
MySQL中一张表有哪些字段,这些字段是否为空、什么类型、长度是多少、默认值是多少;
对于ElasticSearch的索引也一样,它规定了哪些字段可以被查询,哪些字段可以进行分词操作啊,这些规则就是映射
举例
新加映射
基于上一步的age、email、name字段的映射,我们现在想要新加一个字段的映射时得这么做
PUT /my_index/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false #表示该字段只是一个冗余存储的字段,不能被拿去检索。
}
}
}
修改映射
不能更新映射:对于已经存在的字段映射,我们不能更新。更新必须创建新的索引,进行数据迁移。
1.ElasticSearch中的集群、节点是什么?
分布式:一个大业务分拆多个子业务,部署在不同的服务器上。一个节点垮了,那这