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客户端工具来执行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【三维重建NeRF(三)】Mip-NeRF论文解读

本文结合深蓝学院课程学习和本人的理解,欢迎交流指正 文章目录 Mip-NeRF流程简述混叠问题与MipMapMip-NeRF提出的解决办法圆锥台近似计算与集成位置编码(IPE) Mip-NeRF流程简述 Mip-NeRF的大体流程和NeRF基本是一样的,NeRF介绍 创新的部分就是针对NeRF…

系统安全及应用11

一个新的服务器到手之后,部署服务器的初始化 1、配置IP地址 网关 dns解析(static)内网和外网 2、安装源外网(在线即可),内网(只能用源码包编译安装) 3、磁盘分区,lvm …

mybatis—plus和mybatis的区别

一前置知识: CRUD操作(create 添加数据read读取数据 update 修改数据delete删除数据) 二,总体概览 MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发工作、提高…

二人订单共享模式:新零售电商盈利新秘诀

电商江湖日新月异,竞争如火如荼,如何脱颖而出,赢得消费者?二人订单共享模式,这是一种全新的商业模式,旨在打造爆款产品,迅速吸引大量客源,并激发消费者重复购买欲望。 首先&#xf…

Centos 报错 One of the configured repositories failed

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用yum update更新命令就出现下面问题,系统是刚安装的,然后修改了一下IP变成手动。(排查问题前,先回顾自己做了哪些操作,方便进一步排错&a…

C++程序命令行参数学习

argc是参数个数&#xff1b; argv[0]是程序名&#xff0c;argv[1]是第一个参数&#xff1b; 如果输入osgptr1 x &#xff0c;osgptr1是程序名&#xff0c;argc是2&#xff1b; 不算程序名&#xff0c;实际的参数个数是argc-1&#xff1b; #include <iostream>using …

免费!手把手教你用扣子搭建个人知识库

很多人都在寻找一个高效的方式来构建个人知识库&#xff0c;好消息是&#xff0c;随着AI大模型的兴起&#xff0c;每个人都有机会拥有一个熟悉自身的专属AI助手。今天&#xff0c;我就来跟大家详细分享一下如何使用字节跳动推出的神器——扣子&#xff0c;零代码构建个人或企业…

推荐低成本低功耗的纯数字现场可重构IC

CPLD采用CMOS EPROM、EEPROM、快闪存储器和SRAM等编程技术&#xff0c;从而构成了高密度、高速度和低功耗的可编程逻辑器件。 RAMSUN提供的型号LS98003是通用可配置的数字逻辑芯片&#xff0c;有体积小、超低功耗和高可靠性等特点。客户可以根据自己的功能需求设计芯片&#x…

MyBatis:简化数据库操作的强大工具

摘要&#xff1a;本文将介绍MyBatis&#xff0c;一个流行的Java持久层框架&#xff0c;它通过简单的API和易用的特性&#xff0c;帮助开发者更高效地进行数据库操作。我们将探讨MyBatis的核心概念、配置和使用方法&#xff0c;并通过示例展示其在实际项目中的应用。 正文&…

O2O : Finetuning Offline World Models in the Real World

CoRL 2023 Oral paper code Intro 算法基于TD-MPC&#xff0c;利用离线数据训练世界模型&#xff0c;然后在线融合基于集成Q的不确定性估计实现Planning。得到的在线数据将联合离线数据共同训练目标策略。 Method TD-MPC TD-MPC由五部分构成: 状态特征提取 z h θ ( s ) …

Mongodb的数据库简介、docker部署、操作语句以及java应用

Mongodb的数据库简介、docker部署、操作语句以及java应用 本文主要介绍了mongodb的基础概念和特点&#xff0c;以及基于docker的mongodb部署方法&#xff0c;最后介绍了mongodb的常用数据库操作语句&#xff08;增删改查等&#xff09;以及java下的常用语句。 一、基础概念 …

PhpSpreadsheet表格导出

个人笔记记录 使用PhpSpreadsheet 导出excel。 多重表头生成excel 表 //读取数据库public function demo1(){// 连接spc数据库$config Config::get(databaseedc);$db Db::connect($config);$data $db->name("xxxx")->alias(a)->field(main_header, sub_…

《网络安全技术 生成式人工智能服务安全基本要求》征求意见稿

1. 训练数据安全要求 &#xff08;1&#xff09;数据来源安全&#xff1a; 采集来源管理&#xff1a; 采集数据前应进行安全评估&#xff0c;含违法不良信息超过5%的数据源不得使用。 采集后需核验&#xff0c;含违法不良信息超过5%的数据不得用于训练。 不同来源训练数据搭…

四川汇聚荣聚荣科技有限公司评价怎么样?

四川汇聚荣聚荣科技有限公司评价如何?在科技日新月异的今天&#xff0c;四川汇聚荣聚荣科技有限公司作为业界的一员&#xff0c;其表现自然引起了广泛关注。那么&#xff0c;这家公司究竟如何呢?接下来&#xff0c;我们将从四个不同方面对其进行深入剖析。 一、技术实力 四川…

教务管理系统带万字文档基于springboot+vue的校务管理系统java项目

文章目录 教务管理系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码和万字论文参考&#xff08;9.9&#xffe5;带走&#xff09; 教务管理系统 一、项目演示 校务管理系统 二、项目介绍 基于springbootvue的前后端分离教…

Leetcode:整数转罗马数字

题目链接&#xff1a;12. 整数转罗马数字 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;贪心&#xff09; 条件分析&#xff1a;罗马数字由 7 个不同的单字母符号组成&#xff0c;每个符号对应一个具体的数值。此外&#xff0c;减法规则还给出了额外的 6 个复…

简单聊下服务器防病毒

在当今数字化时代&#xff0c;服务器作为数据存储、处理与传输的核心设备&#xff0c;其安全性显得尤为关键。服务器防病毒工作&#xff0c;不仅是保障企业信息安全的重要一环&#xff0c;更是维护用户数据隐私的关键举措。以下&#xff0c;我们将从多个方面&#xff0c;简单探…

Unity之XR Interaction Toolkit如何使用XRSocketInteractable组件

前言 在虚拟现实(VR)和增强现实(AR)开发中,交互性是提升用户体验的关键。Unity作为一个领先的游戏开发引擎,提供了多种工具支持VR/AR开发。Unity的OpenXR插件扩展了这一功能,提供了更强大和灵活的交互系统。其中一个非常有用的组件是XRSocketInteractable。本文将详细介…

串口控制小车和小车PWM调速

1.串口控制小车 1. 串口分文件编程进行代码整合&#xff0c;通过现象来改代码 2.接入蓝牙模块&#xff0c;通过蓝牙控制小车 3.添加点动控制&#xff0c;如果APP支持按下一直发数据&#xff0c;松开就停止发数据&#xff08;蓝牙调试助手的自定义按键不能实现&#xff09;&…

随笔-我在武汉一周了

做梦一样&#xff0c;已经来武汉一周了&#xff0c;回顾一下这几天&#xff0c;还真是有意思。 周一坐了四个小时的高铁到了武汉站&#xff0c;照着指示牌打了个出租车。司机大姐开得很快&#xff0c;瞅了眼&#xff0c;最快速度到了110&#xff0c;差点把我晃晕。一下车就感觉…