ES开发及面试手册

  1. 入门基础
    1. 简介

Elasticsearch是一个基于Lucene的搜索和分析引擎,它提供了一个分布式、多租户能力的全文搜索引擎,具有HTTP Web界面和无模式JSON文档。

    1. 使用场景
    1. 什么是全文检索

全文检索 是一种信息检索技术,它允许用户通过输入查询关键词来搜索存储在计算机中的文本数据,并返回包含这些关键词的文档或文本片段。全文检索与传统的基于关键词或元数据的检索不同,它能够对文档的内容进行深度分析,并基于文档中的词项、短语、句子等进行检索。

全文检索的核心是倒排索引(Inverted Index)。在倒排索引中,每个词项(term)都与一个包含该词项的文档列表相关联。这些文档列表通常包含词项在文档中的位置信息,以及文档的一些其他元数据(如文档ID、分数等)。当用户输入查询时,全文检索系统会在倒排索引中查找与查询词项相关的文档列表,并根据一定的排序算法(如基于词频、文档频率、逆文档频率等)对这些文档进行排序,最终返回给用户。

全文检索系统通常包括以下几个组成部分:

  1. 文档预处理:将原始文档转换为适合全文检索的格式,并进行必要的清洗、分词、去除停用词等处理。
  2. 索引构建:根据预处理后的文档构建倒排索引,以便快速响应用户的查询请求。
  3. 查询处理:接收用户的查询请求,对查询进行分词、去除停用词等处理,并在倒排索引中查找与查询相关的文档。
  4. 结果排序:根据一定的排序算法对检索到的文档进行排序,以便将最相关的文档优先返回给用户。
  5. 结果展示:将排序后的文档以用户友好的方式展示给用户,如列表、摘要、高亮等。

全文检索技术广泛应用于搜索引擎、企业内部文档管理、数字图书馆等领域,帮助用户快速找到他们需要的信息。

    1. 什么是倒排索引

    1. ES的核心概念
  1. 节点(Node):一个运行中的Elasticsearch实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力。ES集群中的节点有三种不同的类型,包括主节点、数据节点等。
  2. 索引(Index):索引就是一个拥有几分相似特征的文档的集合。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。例如,可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。
  3. 分片(Shard):一个索引中的数据保存在多个分片中,相当于水平分表。这样设计使得索引可以存储超出单个节点硬件限制的大量数据。
  4. 映射(Mapping):mapping是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。
  5. 类型(Type):在早期的Elasticsearch版本中,每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field。但需要注意的是,从Elasticsearch 7.x版本开始,类型(Type)的概念已经被弃用,每个索引只能包含一种类型的文档。

    1. ES和Mysql数据库对比

    1. ES分词器
      1. 分词器的选择
  1. Standard Analyzer:默认分词器,按词进行切分,进行小写处理,但对停用词(如“the”、“a”、“is”等)不做处理。
  2. Simple Analyzer:简单分词器,按照非字母进行切分,非字母字符将被过滤,同样进行小写处理。
  3. Stop Analyzer:除了进行小写处理外,还会过滤掉停用词。
  4. Whitespace Analyzer:按照空格进行切分,不做大小写处理。
  5. Keyword Analyzer:不分词,直接将输入当作输出。

对于中文分词,由于ES默认将每个中文字符当作一个词来处理,这可能导致分词效果不理想。因此,你可能需要选择专门的中文分词器。以下是一些常用的中文分词器:

  1. IK Analyzer支持中英文单词的切分,可自定义词库,支持热更新分词词典。IK分词器有两种分词模式:ik_max_word(最细粒度的查询,分出的词条最多)和ik_smart(最粗粒度的查询,大体切分一下,分出的词条比较少)。
  2. Ansj:基于n-Gram+CRF+HMM的中文分词的Java实现,免费开源,支持应用自然语言处理。
  3. HanLP:同样是免费开源的中文分词器,基于自然语言处理,分词准确度高。

在选择中文分词器时,你可以考虑以下因素:

  • 分词准确性:这是选择分词器时最重要的因素之一。你可以通过比较不同分词器的分词结果来选择最准确的分词器。
  • 活跃度:选择活跃度高、持续更新的分词器可以确保你能够获得最新的功能和性能优化。
  • 自定义性:如果你需要自定义词库或调整分词策略,那么选择一个支持这些功能的分词器会更有帮助。
  • 学习成本和使用教程:选择一个学习成本低、使用教程多的分词器可以更快地掌握使用方法。
      1. 分词器的底层实现原理
  1. 基于规则的分词
    • 字典匹配法:这是最简单也是最常用的分词方法。分词器会预先构建一个词典,然后将待分词的文本与词典中的词进行匹配。匹配成功则识别出一个词,然后继续进行下一个词的匹配。
    • 最大匹配法:从待分词的文本中取出一个字符串,如果该字符串在词典中存在,则将其作为一个词切分出来;如果词典中不存在,则去掉该字符串的最后一个字符,再进行匹配,直到匹配成功或字符串长度减少到1为止。
    • 最小匹配法:与最大匹配法相反,从待分词的文本中取出一个较短的字符串进行匹配,然后逐渐增加字符串长度,直到无法匹配为止。
  2. 基于统计的分词
    • 隐马尔可夫模型(HMM:HMM是一种统计模型,用于描述一个系统隐藏状态的转移概率和隐藏状态到输出状态的转移概率。在分词中,可以将每个字或词看作是一个状态,通过训练模型得到状态转移概率和输出概率,然后利用这些概率进行分词。
    • 条件随机场(CRF:CRF是一种判别式概率无向图模型,可以用于序列标注问题。在分词中,可以将每个字或词看作是一个标注,通过训练模型得到标注序列的概率分布,然后利用这个分布进行分词。
  3. 基于深度学习的分词
    • 随着深度学习技术的发展,越来越多的分词器开始采用深度学习模型。这些模型通常使用大量的标注数据进行训练,通过神经网络自动学习文本中的特征和规律,从而进行分词。
    • 常见的深度学习模型包括循环神经网络(RNN)、长短时记忆网络(LSTM)、卷积神经网络(CNN)和Transformer等。这些模型可以处理更复杂的文本结构和语义关系,提高分词的准确性和效率。

    1. Mapping的详解
    1. ES常用的操作
  1. 创建索引
    • 使用PUT命令来创建索引,例如:PUT /my_index。这将创建一个名为“my_index”的索引。索引定义了数据的结构和属性。
  2. 添加文档
    • 使用PUT命令将数据作为文档添加到索引中,例如:PUT /my_index/_doc/1 { "name": "John", "age": 30, "gender": "male" }。这将在“my_index”索引中添加一个名为“1”的文档,其中包含名字、年龄和性别属性。
  3. 查询文档
    • 使用GET命令从Elasticsearch中检索数据,例如:GET /my_index/_doc/1。这将检索名为“1”的文档。Elasticsearch还支持各种复杂的查询语句,如Match查询、Term查询等,以满足不同的搜索需求。
  4. 更新文档
    • 使用POST或PUT命令修改已有数据。具体命令取决于文档是否已经存在以及是否需要完全替换文档。
  5. 删除文档
    • 使用DELETE命令从Elasticsearch中删除数据,例如:DELETE /my_index/_doc/1。这将删除名为“1”的文档。
  6. 删除所有数据
    • 如果需要删除索引中的所有数据,可以使用DELETE命令配合通配符或_all参数,例如:curl -XDELETE 'http://localhost:9200/my_index/_all'(注意,这个命令在不同的Elasticsearch版本中可能有所不同,而且通常不建议在生产环境中使用,因为它会删除整个索引)。
  7. 使用_cat命令
    • _cat命令是Elasticsearch提供的用于获取集群状态、节点信息、索引状态等信息的命令行接口。例如,curl 'localhost:9200/_cat/nodes?v' 可以显示集群中所有节点的详细信息。
  8. 配置和管理
    • 除了基本的CRUD操作外,Elasticsearch还支持丰富的配置和管理命令,如设置索引映射、优化索引、监控集群状态等。这些命令通常通过RESTful API进行调用,并可以使用curl或其他HTTP客户端工具来执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/688791.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CorelDRAW2024发布更新啦!设计师们的得力助手

在数字化的今天,视觉设计已经成为我们生活中不可或缺的一部分。从手机界面到广告海报,从网页布局到包装设计,每一个细节都离不开设计师们的专业与创意。然而,面对日益增长的设计需求和不断提升的审美标准,许多设计师开…

Unity ShaderGraph 扭曲

需要注意的是: HDRP ShaderGraph中 你不能扭曲UI,所以假如你要扭曲视频,请把视频在材质上渲染 播放,这样就可以扭曲视频了喔, ShaderGraph扭曲

vue-el-steps 使用2[代码示例]

效果图 代码 element代码 <template> <div class"app-container"> <el-form :model"queryForm" size"small" :inline"true"> <el-form-item label"内容状态"> <el-button-group> <el-bu…

单列集合.java

单列集合 为了存储不同类型的多个对象&#xff0c;Java提供了一些特殊系列的类&#xff0c;这些类可以存储任意类型的对象&#xff0c;并且存储的长度可变&#xff0c;这些类统称为集合。可以简单的理解为一个长度可变&#xff0c;可以存储不同数据类型的动态数组。集合都位于j…

编写程序,提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单位的加速度 a,然后显示最短跑道长度。

(物理:求出跑道长度)假设一个飞机的加速度是a而起飞速度是v&#xff0c;那么可以使用下 面的公式计算出飞机起飞所需的最短跑道长度: 编写程序&#xff0c;提示用户输入以米/秒(m/s)为单位的速度v和以米/秒的平方(m/s)为单 位的加速度 a&#xff0c;然后显示最短跑道长度。下面…

【数据结构】平衡二叉树左旋右旋与红黑树

平衡二叉树左旋右旋与红黑树 平衡二叉树 定义 平衡二叉树是二叉搜索树的一种特殊形式。二叉搜索树&#xff08;Binary Search Tree&#xff0c;BST&#xff09;是一种具有以下性质的二叉树&#xff1a; 对于树中的每个节点&#xff0c;其左子树中的所有节点都小于该节点的值…

求助!什么软件可以人声分离?手机上可以进行人声分离操作吗?

在数字时代&#xff0c;音频处理变得越来越重要&#xff0c;而人声分离技术则是其中的一项关键技术。很多人可能都有过这样的疑问&#xff1a;什么软件可以实现人声分离&#xff1f;手机上能否进行人声分离操作&#xff1f;今天&#xff0c;我们就来为大家解答这些问题&#xf…

Windows 系统安装 VisualSVN Server

一.下载 VisualSVN Server VisualSVN-Server 是 SVN 版本控制中服务器端要使用的软件,就是我们提交代码存在安装这个软件的电脑上,它将很多配置和服务直接帮你完成,简单好用容易上手。VisualSVN Server有三个版本,社区版免费但限15个用户,另有一般和‘企业’两个收费版本…

利用ArcGIS对长江三角洲地区的gdp水平进行聚类

1、导入矢量图、数据 长三角地区矢量图 长三角地区矢量图对应数据 2、连接 3、设置属性将人均gdp数据导入 4、设置标注和图例 选择布局视图 5、聚类 2020年人均gdp地区聚类 6、2005~2020年各地区人均gdp可视化及聚类汇总 &#xff08;1&#xff09;2005~2020可视化 2005 …

C#操作MySQL从入门到精通(13)——对查询结果使用函数

前言 我们有时候需要对查询到的数据使用函数进行处理,比如去掉空格,比如截取一半长度等操作,下面我来详细介绍: 本文使用的测试数据如下: 1、使用文本处理函数 1.1 Left 返回具有指定长度的字符串的左边部分 下面的代码获取email这个列从左边第一个字符开始计算的一共…

大模型基础——从零实现一个Transformer(1)

一、Transformer模型架构图 主要模块&#xff1a; embedding层&#xff1a; Input/Output Embedding&#xff1a; 将每个标记(token)转换为对应的向量表示。 Positional Encoding&#xff1a;由于没有时序信息&#xff0c;需要额外加入位置编码。 N个 block堆叠: Multi-Head …

自然语言处理(NLP)—— 语言检测器

1. 文章概述 1.1 目的 在本篇文章中&#xff0c;我们将构建一个语言检测器&#xff0c;这是一个能够识别文本语言的简单分类器。这是一个能够识别文本是用哪种语言写的程序。想象一下&#xff0c;你给这个程序一段文字&#xff0c;它就能告诉你这是英语、法语还是其他语言。 …

Linux 35.5 + JetPack v5.1.3@FC-Planner编译安装

Linux 35.5 JetPack v5.1.3FC-Planner编译安装 1. 源由2. 编译&安装Step 1&#xff1a;依赖库安装Step 2&#xff1a;克隆工程Step 3&#xff1a;编译工程Step 4&#xff1a;LKH编译Step 5&#xff1a;安装工程 3. 问题汇总3.1 swarm_exploration/plan_env - OpenCV3.2 程…

天才简史——Tamim Asfour与他的H²T实验室

一、Tamim Asfour介绍 Tamim Asfour为KIT人类学和机器人学研究所&#xff08;Institute for Anthropomatics and Robotics&#xff09;的全职教授&#xff0c;并担任高性能人形技术实验室 (High Performance Humanoid Technologies Lab&#xff0c;HT) 负责人。他目前的研究兴…

【算法专题--栈】最小栈--高频面试题(图文详解,小白一看就会!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐解题方法--1 ⭐解题方法--2 四、总结 五、共勉 一、前言 最小栈这道题&#xff0c;可以说是--栈专题--&#xff0c;比较经典的一道题&#xff0c;也是在面试中频率较高的一道题目&#xff0c;通常在面试中&#xff0c;面试官可…

码蹄集部分题目(2024OJ赛18期;并查集+ST表+贪心)

1&#x1f40b;&#x1f40b;史莱姆融合&#xff08;钻石&#xff1b;并查集&#xff09; 时间限制&#xff1a;1秒 占用内存&#xff1a;128M &#x1f41f;题目描述 &#x1f41f;题目思路 这道题目使用并查集&#xff0c;同一集合的所有元素的最顶上的祖父节点是统一的。…

SAP ABAP 创建表结构 SE11

目录 一&#xff0c;创建表 &#xff1a;T-code:SE11 二&#xff0c;编辑内容&#xff1a; 1&#xff0c;内容说明&#xff1a;必填项&#xff0c;属性&#xff1a;锁定不可更改 2&#xff0c;出荷と更新 &#xff13;&#xff0c;項目 A&#xff1a;表的第一个项目必须是…

编写程序提示用户输入一个数目(例如:100)、年利率(例如:5)以及月份数(例如:6),然后显示给定月份后账户上的钱数。

(财务应用程序:复利值)假设你每月向银行账户存 100美元&#xff0c;年利率为5%&#xff0c;那么每 月利率是 0.05/12-0.00417。 第一个月之后&#xff0c;账户上的值就变成:100*(10.00417)100.417 第二个月之后&#xff0c;账户上的值就变成(100100.417)*(10.00417)-201.252 第…

【Python报错】已解决ImportError: cannot import name ‘xxx‘

成功解决“ImportError: cannot import name ‘xxx’”错误的全面指南 一、引言 在Python编程中&#xff0c;ImportError是一种常见的异常类型&#xff0c;它通常表明Python解释器在尝试导入某个模块或模块中的某个成员时遇到了问题。当看到错误消息“ImportError: cannot imp…

解密智慧校园解决方案:赋能数字化教育的未来

在当今数字化时代&#xff0c;智慧校园解决方案正以惊人的速度改变着教育界的面貌。随着科技的快速发展&#xff0c;数字化教育已经逐渐成为现代教育的核心。智慧校园解决方案作为一个集技术、教育和创新于一体的综合性项目&#xff0c;为学校提供了许多机遇和挑战。本文将揭示…