您的位置:首页 > 娱乐 > 明星 > Elasticsearch面试题

Elasticsearch面试题

2024/12/23 7:30:24 来源:https://blog.csdn.net/yuanmomoya/article/details/141056564  浏览:    关键词:Elasticsearch面试题

1. Elasticsearch的数据类型及检索方式

字符串类型

  • text:用于全文搜索,支持分词和分析。检索方式通常使用 match 等查询。
  • keyword:用于精确匹配,不分词。常使用 term 进行精确检索。

数值类型

  • long:长整型。
  • integer:整型。
  • short:短整型。
  • byte:字节型。
  • double:双精度浮点数。
  • float:单精度浮点数。

检索方式可以使用范围查询(如 gt 大于、 lt 小于等)或精确匹配查询(如 term )。

布尔类型boolean ,值为 truefalse 。可以使用 term 进行精确匹配查询。

日期类型date ,支持多种日期格式。可以使用范围查询来查找特定日期范围内的文档。

对象类型object ,用于表示嵌套的文档结构。可以通过点号来访问嵌套字段进行查询。

数组类型:可以包含相同数据类型的多个值。检索方式与对应的数据类型的检索方式相同。

2. Elasticsearch的node类型

ES集群是由多个ES实例组成的,一个Elasticsearch实例就是一个node。

节点类型配置参数默认值or设置方法
候选主节点node.masterTRUE
数据节点node.dataTRUE
摄取节点node.ingestTRUE
客户端节点将前三个参数全部设置为false
部落节点tribe:*:
协调节点将前三个参数全部设置为false
机器学习节点(machine learning)node.mltrue(需要enable x-pack) (除了OSS发布版)

主节点(Master Node)

  • 作用:负责集群层面的管理工作,比如创建或删除索引、跟踪哪些节点是集群的一部分、决定将分片分配到哪些节点等。主节点不处理数据的索引和搜索操作,主要是维护集群的状态信息。
  • 特点:对内存、CPU 等资源的要求相对较低,但对稳定性和可用性要求较高。

数据节点(Data Node)

  • 作用:存储数据,并负责数据的索引和检索操作。数据节点需要有足够的磁盘空间来存储数据,以及较好的 I/O 性能来处理数据的读写。
  • 特点:对磁盘和 I/O 性能要求较高。

协调节点(Coordinate Node)

  • 作用:接收客户端的请求,并将请求路由到合适的数据节点进行处理,然后汇总各个数据节点返回的结果返回给客户端。协调节点本身不存储数据,主要负责协调和分发请求。
  • 特点:对 CPU 和内存有一定要求,以处理请求的分发和结果的汇总。

Ingest 节点

  • 作用:在数据被索引之前对数据进行预处理,例如转换、过滤、丰富数据等。
  • 特点:需要一定的计算资源来执行预处理操作。

在实际的部署中,可以根据集群的规模和工作负载,灵活配置不同类型的节点,以达到最佳的性能和资源利用。

3. Elasticsearch的写底层原理以及删除更新的原理

ES的索引是不能改的,删除和更新都不是直接在原索引中执行

  • 删除文档:每一个segment都会维护一个del文件,用来记录删除的文档。用户发出删除请求后,文档并没有真正被删除,而是del文件中记录被删除的文档,但该文档依然能被检索到,只是在最后过滤掉,当segment合并时,才会真正地删除del标志的文档。
  • 更新文档:首先获取原文档的版本号,然后将修改后的文档和版本号一起写进,这过程和新增相同,同时旧文档也被标志成删除文档,同样能被检索到,只不过最终被过滤掉而已

4. text 和 keyword类型的区别

​ 两个类型的区别主要是分词:keyword 类型是不会分词的,直接根据字符串内容建立倒排索引,所以keyword类型的字段只能通过精确值搜索到;Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立倒排索引

5. query 和 filter 的区别

(1)query:查询操作不仅仅会进行查询,还会计算分值,用于确定相关度;

(2)filter:查询操作仅判断是否满足查询条件,不会计算任何分值,也不会关心返回的排序问题,同时,filter 查询的结果可以被缓存,提高性能。

6. match和term的区别

在 Elasticsearch 中,matchterm 是两种常见的查询类型,它们有以下区别:

match 查询

  • 作用:会对输入的文本进行分析和分词处理,然后在倒排索引中查找匹配的文档。
  • 特点:
    • 适用于全文搜索,能够处理自然语言的模糊匹配。
    • 会对输入的文本进行词干提取、大小写转换等预处理操作,以提高搜索的灵活性。
  • 示例:假设一个字段包含文本 “I love Elasticsearch” ,使用 match 进行查询 “love elasticsearch” 也能匹配到该文档。

term 查询

  • 作用:直接查找在倒排索引中精确匹配的词条。
  • 特点:
    • 用于精确匹配,不会对输入的值进行任何分析或预处理。
    • 通常用于匹配数值、布尔值、日期等精确值,或者不会被分析的字符串字段。
  • 示例:如果一个字段的值是 “Elasticsearch” ,只有使用 term 查询 “Elasticsearch” 才能匹配到,查询 “elasticsearch” 则不会匹配。

例如,假设有一个索引包含用户信息,其中有一个 city 字段被定义为不会被分析的字符串类型。如果要精确查找居住在 “New York” 的用户,应该使用 term 查询。但如果要查找包含 “New” 这个词的城市的用户,就应该使用 match 查询。

7. 分词与倒排索引的原理

分词:分词用于检索,英文的分词是按单词之间空格区分,中文要考虑效率和准确分词率,防止出现歧义。

倒排:根据文档内容找文档,从关键字去找文档。

倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。区别于传统的正向索引,倒排索引会再存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询时,将查询内容进行分词后在倒排表中进行查询,最后匹配数
据即可。Elasticsearch 使用一种称为倒排索引的结构,ES中的倒排索引其实就是 lucene 的倒排索引,它适用于快速的全文搜索。正向索引(forward index),就是搜索引擎会将待搜索的文件都对应一个文件 ID,搜索时将这个ID 和搜索关键字进行对应,形成 K-V 对,然后对关键字进行统计计数。但是互联网上收录在搜索引擎中的文档的数目是个天文数字,这样的索引结构根本无法满足实时返回排名结果的要求。所以,搜索引擎会将正向索引重新构建为反向索引(inverted index,倒排索引),即把文件ID对应到关键词的映射,转换为关键词到文件ID的映射,每个关键词都对应着一系列的文件,并保存到倒排表中,查询时会将内容进行分词后在倒排表中进行查询,最后匹配数据即可。这些文件中都出现这个关键词。
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com