Elasticsearch面试题总结

devtools/2025/1/15 9:53:20/

1、ElasticSearch是什么?

概念: Elasticsearch是由 java语言开发基于Lucene的一款开源的搜索、聚合分析和存储引擎。同时它也可以称作是一种非关系型文档数据库。
特点:

  • 天生分布式、高性能、高可用、易扩展、易维护。
  • 跨语言、跨平台:几乎支持所有的主流语言。
  • 支持结构化、非结构化、地理位置搜索等

使用场景

  • 海量数据的全文检索,搜索引擎、垂直搜索、站内搜索:
    1.百度、知乎、微博、CSDN。
    2.导航、外卖、团购等软件
    3.以京东、淘宝为例的垂直搜索
    4.B站、抖音、QQ音乐等软件
    5.github
  • 数据分析和聚合查询
  • 日志系统:ELK

2.Mapping是什么?

2.1 概念

ES中的mapping有点类似与RDB中“表结构”的概念,在MySQL中,表结构里包含了字段名称,字段的类型还有索引信息等。在Mapping里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。分词器、评分等概念在后面的课程讲解。

2.2 ES数据类型

2.2.1.常见的数据类型

1.数据类型:long 、 integer、short、byte、double、float、half_float、scaled_float、unsigned_long
2.keywords:

  • .keyword:适用于索引结构化的字段,可以用于过滤、排序、聚合。keyword类型的字段只能通过精确值(exact value)搜索到。ld应该用keyword。keyword字段通常用于排座,汇总和Term查询,例如term。
  • constant keyword:始终包含相同值的关键字字段
  • wildcard:可针对类似grep的通配符查询优化日志行和类似的关键字值

3.dates:包括date和date_nanos。
4.alias:为现有字段定义别名
5.text:当一个字段是要被全文搜索的,比如Email内容、产品描述,这些字段应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。(解释一下为啥不会为text创建正排索引:大量堆空间,尤其是在加载高基数text字段时。字段数据一旦加载到堆中,就在该段的生命周期内保持在那里。同样,加载字段数据是一个昂贵的过程,可能导致用户遇到延迟问题。这就是默认情况下禁用字段数据的原因)

2.2.2 结构化类型

1.geo-point:纬度/经度积分
2.geo-shape:用于多边形等复杂形状
3. point:笛寒尔坐标点
4.shape:笛卡尔任意几何图形

2.3 自动映射和手工映射

在这里插入图片描述
在这里插入图片描述

3.什么是全文检索

3.1 相关度

  • 搜索:有明确 查找边界。
  • 检索:讲究相关度,无明确的查询条件边界。
  • 在这里插入图片描述

2.3 图解全文检索

用检索词小米NFC手机,被拆为小米、NFC和手机这三个词去整张表分词中取匹配,其中匹配了三个分词,如下图所示:
在这里插入图片描述

2.3.1 分词图解

在当前字段上,在你创建数据的时候,创建分词。
分词的创建过程可简单分为以下几个步骤:
1.切词
2.规范化
3.去重
4.字典序
在这里插入图片描述
其中,如图所示,一个切词就有一个term ,Postting List表示ES分词对应的物理表结构中的数据项。最后按照匹配度进行排名。

4.ES支持哪种类型查找?

在这里插入图片描述

4.2 按场景划分

4.2.1 Query String
在这里插入图片描述

4.2.2 全文检索

在这里插入图片描述

4.2.3 精准查询

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.3 按照数据类型划分

在这里插入图片描述

5. term、match、keyword有何区别,你还知道哪些检索类型

5.1、term和match

term:对于搜索词影响,不对源数据影响。
match:对搜索词影响,不对源数据影响。

5.2 term和keyword

term:检索类型
keyword:字段类型

6.什么是开发模式和生产模式

开发模式: 开发模式是默认配置(未配置集群发现设置),如果用户只是出于学习目的,而引导检查会把很多用户挡在门外,所以ES提供了一个设置项 discovery.type=single-node。此项配置为指定节点为单节点发现以绕过引导检查。
生产模式: 当用户修改了有关集群的相关配置会触发生产模式,在生产模式下,服务启动会触发ES的引导检查或者叫启动检查bootstrap checks)(或者叫启动检查),所谓引导检查就是在服务启动之前对一些重要的配置项进行检查,检查其配置值是否是合理的。引导检查包括对JVM大小、内存锁、虚拟内存、最大线程数、集群发现相关配置等相关的检查,如果某一项或者几项的配置不合理,ES会拒绝启动服务,并且在开发模式下的某些警告信息会升级成错误信息输出。引导检查十分严格,之所以宁可拒绝服务也要阻止用户启动服务是为了防止用户在对ES的基本使用不了解的前提下启动服务而导致的后期性能问题无法解决或者解决起来很麻烦。因为一旦服务以某种不合理的配置启动,时间久了之后可能会产生较大的性能问题,但此时集群已经变得难以维护,ES为了避免这种情况而做出了引导检查的设置。这种设定虽然增用户的使用门槛,但是避免了日后产生更大的问题

7.倒排索引的基本原理是什么?

7.1 概念

倒排索引:“关键词” =>“文档ID” ,即关键到文档id的映射。

7.2 倒排索引的基本数据结构

term dictionary表示词项,Posting List有序存放brand表中的主键id,term dictionary和Posting List的映射叫做倒排序索引。
在这里插入图片描述
在这里插入图片描述

8.为什么ES不像MySQL采用B+Tree的数据结构

8.1什么是索引

本质帮助快速检索
以数据结构为载体
以文件落地

8.2 数据库的组成

在这里插入图片描述

8.3 B-Trees的数据结构

在这里插入图片描述

8.4. B+Tree的数据结构

在这里插入图片描述
为什么B+Tree的每个节点只能存放16Kb的数据,而全文索引中的字段有些字段是text性能很有可能超过数据页的大小,如果出现一个超大的数据存储该字段,那么可能要用多个节点存储该字段,那个节点数会出现指数级的增长,导致数的深度特别的深,所以InnoDB不支持全文索引。

8.5 总结

1.索引往往字段很长,如果使用B+Trees,树的深度很深,IO很可怕。
2.性能无法保证并且索引失效。
3.精准度差,并且无法和其他属性产生相关性。

结束语

本篇到此结束了后面还会有相关的高级知识。


http://www.ppmy.cn/devtools/150651.html

相关文章

大模型系列——推理能力增强 rStar-Math 论文笔记

我们提出rStart-Math来证明小型语言模型SLM可以与OpenAI O1的数学推理能力相媲美甚至超越,而无需从更高级的模型中蒸馏。rStart-Math通过蒙特卡洛树搜索MCTS来实现深度思考,其中一个数学策略SLM执行测试时搜索,该搜索由基于SLM的过程奖励模型…

探索新能源汽车“芯”动力:AUTO TECH China 2025广州国际新能源汽车功率半导体技术展盛况空前

广州,2025年11月20日‌ —— 在全球新能源车市场蓬勃发展的背景下,AUTO TECH China 2025 广州国际新能源汽车功率半导体技术展览会将于2025年11月20-22日在广州保利世贸博览馆盛大开幕。此次展会作为亚洲领先的车用功率半导体技术专业盛会,本…

PySpark广播表连接解决数据倾斜的完整案例

使用PySpark解决数据倾斜问题的完整案例,通过广播表连接的方式来优化性能。 准备数据 假设我们有两张表,一张大表 big_table 和一张小表 small_table ,小表将作为广播表。 from pyspark.sql import SparkSession# 初始化SparkSession spar…

HTML中最基本的东西

本文内容的标签,将是看懂HTML的最基本之基本 ,是跟您在写文章时候一样内容。一般想掌握极其容易,但是也要懂得如何使用,过目不忘,为手熟尔。才是我们学习的最终目的。其实边看边敲都行,或者是边看边复制粘贴…

是德科技Keysight N9020A实时频谱分析仪N9000A

是德科技Keysight N9020A实时频谱分析仪N9000A 是德科技N9020A实时频谱分析仪体验实时频谱分析 – 是德科技测量之道 PXA 和 MXA 是可通过升级添加 实时分析功能的主流信号分析仪。现 有的分析仪无需经过重新校准即可添 加实时分析功能。在 PXA 或 MXA 的 基础上&#xff0c…

Python脚本自动发送电子邮件

要编写一个Python脚本来自动发送电子邮件,你可以使用smtplib库来处理SMTP协议,以及email库来构建邮件内容。 安装必要的库 通常情况下,smtplib和email库是Python标准库的一部分,因此不需要额外安装。如果你使用的是较旧的Python版…

【Ubuntu与Linux操作系统:七、系统高级管理】

第7章 系统高级管理 7.1 Linux进程管理 进程是Linux系统中的基本运行单位,代表一个正在执行的程序。Linux通过进程管理实现多任务并发处理,支持用户高效利用系统资源。 1. 进程的基本概念: 进程状态:进程在运行过程中可能处于运…

web前端第八次作业---制作音乐榜单

制作音乐榜单 代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…