elasticsearch介绍

2023-11-05

什么是elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
------来自百度百科
elasticsearch目前的使用还是非常广泛的,携程、滴滴、今日头条、饿了么、360安全、小米、vivo等等公司都在使用elasticsearch。

elasticsearch的由来-程序员的浪漫

在这里插入图片描述

许多年前,一个名叫Shay Banon的开发者,带着新婚妻子去伦敦生活,在得知妻子想从事厨师工作后,准备利用自己所学为妻子开发一个食谱搜索引擎,他开始使用Lucene的一个早期版本。但是尝试之后,他发现直接使用Lucene给没有任何开发经验的妻子而言是非常困难的,因此Shay 开始对Lucene进行封装。不久他发布了他的第一个基于Lucene的用java编写的开源项目 Compass。后来Shay找到了一份跟高性能和分布式有关的工作,然后发现这份工作对实时、分布式搜索引擎的需求尤为突出,于是他决定重写Compass,把它变为一个独立的服务并取名Elasticsearch,再到后来Elasticsearch发布了第一个公开版本,从此以后,Elasticsearch已经成为了 Github 上最活跃的开源项目之一。据说,Shay的妻子还在等着她的食谱搜索引擎,而他已经在大公司忙的“一发不可收拾”…

开源的全文检索引擎-Lucene

开源的信息检索程序库目前很多很多,而Lucene应该是目前使用最多的一个,目前使用较多的Elasticsearch和Solr,两者都是基于Lucene进行开发的,Lucene是一个很值得深入学习的开源组件,各位感兴趣的童鞋可以自己好好看一看他的实现原理。

这里讲一下其中的核心,倒排索引。
在这里插入图片描述

1、设有两篇文档a和b

文档a:我是中国人,我爱中国。
文档b:张三是中国人。

补充概念:
分词:我们需要讲一个文档划分成一个一个单词,我爱中国->我,爱,中国,张三是中国人->张三,是,中国,人。划分规则有分词算法和词库来控制,分词算法控制分词力度,而最终划分的单词都应该在词库中存在。

2、经过分词后的文档a和b

文章a:[我],[是],[爱],[中国],[人]
文章b:[张三],[是],[中国],[人]

3、建立倒排索引

有了关键词后,我们就可以建立倒排索引了。平时我们接触到存储与倒排索引不太一致,正常的逻辑通过文档名查找文档内容。而倒排索引则是通过文档内容寻找文档名.

关键词 文章号
我 a
爱 a
中国 a,b
张三 b
是 a,b
人 b

4、优化倒排索引

通常仅知道关键词在哪些文章中出现还不够,我们还需要知道关键词在文档中出现次数和出现的位置,通常有两种位置:
a)字符位置,即记录该词是文档中第几个字符(优点是关键词亮显时定位快)
b)关键词位置,即记录该词是文档中第几个关键词(优点是节约索引空间、词组(phase)查询快)
lucene 中记录的就是这种位置。

关键词 文章号[出现频率] 出现位置
我 a[2] 1,5
爱 a[1] 6
中国 a[2],b[1] 3,7,3
张三 b[1] 1
是 a[1],b[1] 2,2
人 a[1],b[1] 4,4

这里解释一下,以中国为例,中国在文档a中出现2次,出现位置为a中的第三个关键词和第7个关键词,在文档b中出现1次,位置为b中的第三个关键词。

以上就是lucene索引结构中最核心的部分。我们注意到关键字是按字符顺序排列的(lucene没有使用B树结构),因此lucene可以用二元搜索算法快速定位关键词。

ES核心概念

1、Cluster:集群。

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

2、Node:节点。

形成集群的每个服务器称为节点。

3、Shard:分片。

当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。
当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

4、Replia:副本。

为提高查询吞吐量或实现高可用性,可以使用分片副本。
副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。
当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

5、全文检索。

全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。

ES与mysql对应关系

Index:索引,这里说的索引是名词,相当于mysql中的数据库。
Type:规定的一种存储类型,即归属于这个type中的文档都要满足这个type约定的字段,可以理解成关系数据库中Table。
Document:文档对象,即关系数据库中的一行数据。
在这里插入图片描述
elasticsearch使用dsl进行查询,对于基本的增删改查,分组聚合都是满足的。后面会续更一篇dsl和es api的教程。人生有梦,各自精彩。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

elasticsearch介绍 的相关文章

  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何提取文件 jre-9/lib/modules?

    In JRE 9 lib目录 至少在 Windows 上 有一个名为modules其大小约为107 MB 是否可以提取该文件或在其中列出 java 模块 我可以看到一个名为jmod可以在jdk 9 bin jmod exe 但那是为了阅读
  • 如何配置 Spring-WS 以使用 JAXB Marshaller?

    感谢您到目前为止对此的帮助 我正在更新问题 因为我没有显示我需要的所有内容 并显示了建议的更改 肥皂输出仍然不是我想要的 servlet xml
  • GET 请求的 Spring 注解

    这两种spring GET方法有什么区别呢 哪一种是首选方法 Component Scope request Path public class TestComponent GET Path hello public String prin
  • 在命令行java中突出显示文本[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一项任务是重新创建 unix cal 程序 除了一部分之外 相当简单 今天 它突出显示了该数字 我不知道该怎么做 关于如何在 Ja
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 检查 IPv4 地址是否在私有范围内

    在 Python 中 使用 IPy 模块您可以执行以下操作 gt gt gt ip iptype PRIVATE 有没有一个库或简单的方法可以在 Java 中执行相同的操作 似乎不完全是但是InetAddress有一些 isXX 方法 例如
  • 是否有最新的 Facebook Java SDK? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 好像没找到最近更新的 如果没有 是否有一个好的 Java 库来执行与 Facebook 的 API 交
  • Android 解析 JSON 卡在 get 任务上

    我正在尝试解析一些 JSON 数据 我的代码工作了一段时间 我不确定我改变了什么突然破坏了代码 当我运行代码时 我没有收到任何运行时错误或警告 我创建一个新的 AsyncTask 并执行它 当我打电话时 get 在这个新任务中 调试器在此行
  • java swing:向 JTree 项目添加自定义图形按钮

    我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮 这可以做到吗 如果是这样 怎么办 thanks Clamp 你在这方面成功了吗 我想做同样的事情 但很难让 JButton 响应用户 设置渲染器以显示按钮的过程很顺利 但所有鼠标
  • 在循环中按名称访问变量

    我正在开发一个 Android 项目 并且有很多可绘制对象 这些绘图的名称都类似于icon 0 png icon 1 png icon 100 png 我想将这些可绘制对象的所有资源 ID 添加到整数 ArrayList 中 对于那些不了解
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • Java 中处理异步响应的设计模式

    我读过类似问答的答案 如何在 JAVA 中创建异步 HTTP 请求 https stackoverflow com questions 3142915 how do you create an asynchronous http reque
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何清理 Runtime.exec() 中使用的用户输入?

    我需要通过命令行调用自定义脚本 这些脚本需要很少的参数并在 Linux 机器上调用 当前版本容易出现各种shell注入 如何清理用户给出的参数 参数包括登录名和路径 Unix 或 Windows 路径 用户应该能够输入任何可能的路径 该路径
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • 为什么我不能将 Collection 转换为 Collection>

    问题的关键是 为什么这会导致编译时错误 List
  • java.lang.ClassCastException:com.sun.proxy.$Proxy8 无法转换为 org.openqa.selenium.internal.WrapsDriver

    我有以下切入点和 AspectJ 中给出的建议 Pointcut call org openqa selenium WebElement sendKeys public void onWebElementAction After onWeb
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外
  • 使用 AmazonSNSClient 发送短信时的授权

    aws 官方文档如何发送短信 http docs aws amazon com sns latest dg sms publish to phone html使用 java 中的 aws SDK 非常简单 但是 当发送如底部示例所示的消息时

随机推荐

  • 6个例子让你彻底明白,什么是纳什均衡

    6 个例子让你彻底明白 什么是纳什均衡 电影 美丽心灵 的主人公原型 约翰 纳什因车祸去世 你也许听说过他是厉害的数学家 1994 年诺贝尔经济学奖得主 博弈论之父 但是 他的最大贡献是 纳什均衡 那么问题来了 纳什均衡到底是个什么鬼 我们
  • java--面向对象----->图书管理系统

    一 写主类 public class Message 属性 private String name private int state private int date private int count 构造器 public Messag
  • Python数模笔记-StatsModels 统计回归(4)可视化

    人工智能学习离不开实践的验证 推荐大家可以多在FlyAI AI竞赛服务平台多参加训练和竞赛 以此来提升自己的能力 FlyAI是为AI开发者提供数据竞赛并支持GPU离线训练的一站式服务平台 每周免费提供项目开源算法样例 支持算法能力变现以及快
  • linux多服务器之间的目录文件同步

    linux多服务器之间的目录文件同步 1 先在每台服务器上安装rsync yum install rsync 2 每台机器启动rsync服务 systemctl start rsyncd service systemctl enable r
  • 深入Java微服务之网关系列3: SpringCloudalibaba gateway详解(史上最全)

    九 服务网关 Gateway 9 1 网关简介 大家都都知道在微服务架构中 一个系统会被拆分为很多个微服务 那么作为客户端要如何去调用这么多的微服务呢 如果没有网关的存在 我们只能在客户端记录每个微服务的地址 然后分别去调用 这样的架构会存
  • SQL优化实战:如何通过缓存给MySQL查询进行流量削峰?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 前 言 经过前面索引和sql的优化后 现在查询速度快的飞起 然后 我们继续回归到了日常需求的开发中 3个月过后 订单表的数据已经达到5000万了 不过sql一次查询的
  • Shiro学习笔记。

    授权需要继承 AuthorizingRealm 类 并实现其 doGetAuthorizationInfo 方法 AuthorizingRealm 类继承自 AuthenticatingRealm 但没有实现 AuthenticatingR
  • android opengl旋转,OpenGL纹理旋转及翻转问题详解

    大家好 我是程序员kenney 今天给大家讲解一下Android上OpenGL开发可能会遇到的一些纹理旋转及翻转的问题 其中有些原理在其它平台上如ios osx上也是类似的 纹理旋转的问题一定要搞清楚 不能每当碰到一个方向不对的就自己旋转一
  • vue+ElementUI页面模板

    一 在普通HTML项目中引入elementUI vue elementUI的HTML页面模板 可以直接套用 引入 vue CDN 引入elementUI CDN 官方文档地址 https element faas ele me zh CN
  • Visual Studio 编译C++时出现 error RC2144: PRIMARY LANGUAGE ID not a number

    最近在用VS编译Qt项目时 为rc资源文件添加了版本信息后就编译不通过了 编译输出提示错误 error RC2144 PRIMARY LANGUAGE ID not a number 在网上搜索后发现大多数的解决方法是在rc文件中添加如下一
  • windows hosts文件恢复

    解决方法 重新创建hosts文件 在路径C Windows System32 drivers etc中查找 注意 记住hosts文件没有后缀 之前我一直存储为文本导致无法正常使用
  • 减少域名DNS解析时间将网页加载速度提升新层次-DNS缓存/预读取/拆分域名

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们知道在用户访问网站时先得经过域名DNS解析这一过程 可能很多人对于DNS解析时间平常并没有太在意 性能稳定 响应时间快的DNS域名解析服务与不稳定 响应过慢的DNS的域
  • vue中使用(瀑布流)vue-waterfall-easy插件

    参考文档 效果图如下 1 安装 npm install vue waterfall easy save dev 2 引入 import vueWaterfallEasy from vue waterfall easy export defa
  • Nacos配置中心原理(一)客户端部分

    基本概念 配置服务 在服务或者应用运行过程中 提供动态配置或者元数据以及配置管理的服务提供者 配置项 个具体的可配置的参数与其值域 通常以 param key param value 的形式存在 例如我们常 配置系统的日志输出级别 logL
  • OpenCV3.3中主成分分析(Principal Components Analysis, PCA)接口简介及使用

    OpenCV3 3中给出了主成分分析 Principal Components Analysis PCA 的实现 即cv PCA类 类的声明在include opencv2 core hpp文件中 实现在modules core src p
  • SAS9.4安装简易教程(保姆级)附带报错处理

    SAS安装教程 正常安装 环境准备 文件准备及安装 增强编辑器问题 一些报错处理方法 1 安装后处理 解决方案1 解决方案2 2 日期超过了SAS系统的最后截至日期 解决方案 3 逻辑库问题 解决方案 4 sid及产品许可问题 解决方案 卸
  • JT格式介绍(转换)

    JT Jupiter Tessellation 是一种高效 专注于行业且灵活的 ISO 标准化 3D 数据格式 由 Siemens PLM Software 开发 航空航天 汽车工业和重型设备的机械 CAD 领域使用 JT 作为其最领先的
  • 我的世界服务器无限刷东西指令,我的世界无限刷物品命令方块指令

    发布时间 2015 09 11 精华文章推荐 合成表大全 前期生存图文指南 怪物图鉴及属性一览 敖厂长生存解说视频 新手建筑指导班 豪华建筑建造教程 俾斯麦号建造方法 WE建筑辅助教程 创建服务器方法指南 加入服务器联机教程 多 标签 攻略
  • 学习实践-Alpaca-Lora (羊驼-Lora)(部署+运行+微调-训练自己的数据集)

    Alpaca Lora模型GitHub代码地址 1 Alpaca Lora内容简单介绍 三月中旬 斯坦福发布的 Alpaca 指令跟随语言模型 火了 其被认为是 ChatGPT 轻量级的开源版本 其训练数据集来源于text davinci
  • elasticsearch介绍

    什么是elasticsearch Elasticsearch是一个基于Lucene的搜索服务器 它提供了一个分布式多用户能力的全文搜索引擎 基于RESTful web接口 Elasticsearch是用Java语言开发的 并作为Apache