揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念

这篇具有很好参考价值的文章主要介绍了揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        Elasticsearch 是一个开源、分布式、实时搜索和分析引擎,专门用于处理大规模数据的快速检索与分析。它建立在 Apache Lucene 的基础上,但提供了比 Lucene 更为丰富的功能和友好的RESTful API 接口,使得开发者能够轻松地进行全文搜索、结构化搜索以及对海量数据进行复杂的聚合操作。

        Elasticsearch 目前被广泛用于互联网多种领域中。一是搜索领域,相对于 solr,成为很多搜索的不二之选。二是 Json 文档数据库,相对于 MongoDB,读写性能更佳,而且支持更丰富的地理位置查询以及数字、文本的混合查询。三是时序数据分析处理,目前在日志处理、监控数据存储、分析和可视化方面做的非常好。

        一、Elasticsearch与Lucene关系

        Lucene 只是一个库,想要使用它必须Java语言来作为开发语言并将其直接集成到你的项目中,更糟糕的事,Lucene 非常复杂,需要摄入了解检索知识来理解它是如何工作的

        Elasticsearch 也是使用 Java 开发并且使用 Lucene 作为其核心来实现所有索引和搜索功能,但是它的目的是通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文检索变的简单。

        二、倒排索引

        首先看下什么是正排索引,正排索引指的是文档 ID 到文档内容的索引,简单讲就是通过 ID找内容。

        倒排索引(Inverted Index)是根据文档内容找文档,是一种常见的索引结构,他在信息检索领域有重要作用。与传统的正排索引不同,倒排索引以词项为基础,将文档内容映射到词项上,提供了更高效的文本检索和搜索能力。

        倒排索引是不可变的,有分段的概念,查询时,所有已知的段按顺序被查询。段是不能被改变的,所以既不能把文档从旧的段中移除,也不能修改旧的段来进行更新。删除数据时并不是真正的删除,而是做上删除标记。

        当倒排索引过多时,段是可以进行合并的,当合并段时,就会将有删除标记的文档进行物理删除。

        倒排索引主要包含两个核心部分:

        单词词典(Lexicon):记录了文本集合中出现过的所有不重复的单词(或者其它可作为查询单位的术语),并为每个单词提供一个唯一的标识符(通常是整数)。这个部分相当于一个字典,可以迅速找到与给定单词相关的倒排列表。

        倒排文件(Posting List 或 Inverted List):对于词典中的每个单词,倒排文件包含了所有包含该单词的文档列表及其在文档中的位置信息(有时还包括频率信息,如TF-IDF权重等)。这意味着,当你想要查找包含特定单词的所有文档时,可以直接通过倒排索引迅速定位到相应的文档列表,而不需要逐个检查文档。

        假设有两个文档

揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念,elasticsearch,分布式,大数据

        为了创建倒排索引,我们首先将每个文档的content域拆分成单独的词(称为词条或tokens),创建一个包含所有不重复词条的列表,然后列出每个词条出现在哪个文档。

揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念,elasticsearch,分布式,大数据

        Elasticsearch 为了能很快速找到某个 term,将所有的 term 排个序,二分法查找 term,LogN 的查找效率,就像通过字典查找一样,这就是 Term Dictionary。似乎和传统数据库通过 B-Tree 的方式类似。

        B-Tree通过减少磁盘寻道次数来提升查询性能,Elasticsearch也是同样的思路,直接通过内存来查找Term,不读磁盘,但是如果Term太多,Term Dictionary也会很大,放内存不现实,于是有了Term Index,就像字典里的索引页一样,A开头的有哪些term,分别在哪几页,可以理解Term Index是一棵树。

揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念,elasticsearch,分布式,大数据

        这棵树不会包含所有的Term,他包含的是Term的一些前缀。通过Term Index可以快速定位到term dictionary的某个offset,然后从这个位置再往后顺序查找。

        揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念,elasticsearch,分布式,大数据

        所以 term index 不需要存下所有的 term,而仅仅是他们的一些前缀与Term Dictionary之间的映射关系,再结合FST(Finite State Transducers)的压缩技术,可以使term index缓存到内存中。从term index查到对应的term dictionary的block位置之后,再去磁盘上找term,大大减少了磁盘随机读的次数。

        三、Elasticsearch关键概念

        首先看下Elasticsearch的架构图,下面分别介绍一下其核心概念。

揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念,elasticsearch,分布式,大数据

  • Cluster:代表一个集群,集群中有多个节点,其中一个是主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的,es 的概念是去中心化,因此从外部来看 es 集群,在逻辑上是一个整体。
  • 节点(Node):物理概念,一个运行的 Elasticsearch 实例,一般是一台机器上的一个进程。
  • 索引(INdex):逻辑概念,索引是文档的容器,每个索引都有自己的Mapping定义,用于定义包含文档的字段名和字段类型,另一个重要的概念是setting,定义的是数据的不同分布。一个索引的数据文件可能分布于一台机器上,也有可能分布于多台机器上。索引的另外一层意思是倒排索引文件。
  • Dynamic Mapping:Mapping 可以简单的理解为数据库的 schema,用于定义索引中字段的名称、类型、倒排索引、指定字段使用何种分词器等。Dynamic Mapping 意思就是在我们创建文档的时候,如果索引不存在,就会自动的创建索引,同时自动的创建 Mapping,ElasticSearch 会自动的帮我们推算出字段的类型,当然,也会存在推算不准确的时候,就需要我们手动的设置。
  • 类型(type):5.x 支持多种 type。6.x 只有一种 type。在 7.0 之前,一个 Index 可以创建多个Type。之后只能一个 Index 对应一个Type。
  • 文档(Document):一个文档是一个可被索引的基础单元,也是一条数据。文档以JSON(JavaScript Object Notation) 格式表示。
  • 分片(Shard):相当于关系型数据库的分表。为了支持更大量的数据,索引一般会按某个维度分成多个部分,每个部分就是一个分片,分片被节点(Node)管理,一个节点(Node)会管理多个分片,这些分片可能是属于同一份索引,也有可能指向不同索引,但是为了可靠性和可用性,同一个索引的分片尽量会分布在不同节点(Node)上。分片有两种,主分片和副本分片。分片的作用:
    • 允许水平分割,水平扩展容量
    • 允许在分片上进行分布式、并行操作,进而提高性能/吞吐量

        注意:分片数据在索引创建时就已经确定下来了,是不能被修改的。

  • 副本(Replica):同一个分片(Shard)的备份数据,一个分片可能会有 0 个或多个副本,这些副本中的数据保证强一致或最终一致,提高可用性,提升性能/吞吐量。分片数不能修改,但是副本数是可以修改的。
  • recovery:代表数据恢复或叫数据重新分布,es 在有节点加入或退出时会根据机器负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。
  • river:代表 es 一个数据源,也是其他存储方式同步数据到 es 的一个方法。它是以插件方式存在的一个 es 服务,通过读取 river 中的数据并把他索引到 es 中,常见的有 couchDB、RabbitMQ 等,在es2.0之后取消了。
  • gateway:代表 es 索引快照的存储方式,es 默认是先把索引存储到内存中,当内存满了在持久化到本地磁盘。gateway 对索引快照进行存储,当这个 es 集群关闭在重新启动时就从gateway 中读取索引备份数据。es 支持多种类型的 gateway,有本地文件系统、分布式系统、云服务存储。
  • Transport:代表 es 内部节点或集群与客户端的交互方式,默认内部是 tcp 协议进行交互,同时支持 http、thrift、servlet 等传输协议。

        关于Elasticsearch相关概念就介绍到这里,后边继续介绍相关的功能。文章来源地址https://www.toymoban.com/news/detail-827784.html

到了这里,关于揭秘Elasticsearch:一文读懂分布式搜索与分析引擎的核心概念的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 分布式搜索elasticsearch概念

    分布式搜索elasticsearch概念

    什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容   目录 elasticsearch的场景 elasticsearch的发展  Lucene篇 Elasticsearch篇   elasticsearch的安装 elasticsearch的场景 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被

    2024年02月04日
    浏览(16)
  • 分布式搜索引擎——elasticsearch搜索功能

    分布式搜索引擎——elasticsearch搜索功能

    Elasticsearch提供了基于JSON的DSL (Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如: match_query multi_match_query 精确查询:根据精确词条

    2024年02月05日
    浏览(11)
  • 分布式搜索引擎ElasticSearch——搜索功能

    分布式搜索引擎ElasticSearch——搜索功能

    DSL查询分类 DSL官方文档 全文检索查询 精确查询 地理查询 复合查询 Function Score Query function score query Boolean Query 排序 分页 官方文档 高亮 快速入门 match,term,range,bool查询 排序和分页 高亮显示 就是在前面抽取的解析代码中进一步添加关于高亮的解析部分,因为highlight和so

    2024年02月01日
    浏览(12)
  • 分布式搜索引擎----elasticsearch

    分布式搜索引擎----elasticsearch

    目录 1、初识elasticsearch 1.1、什么是elasticsearch 1.2.ELK技术栈 2、正向索引和倒排索引 2.1、正向索引 2.2、倒排索引 2.3、正向索引和倒排索引的区别 3、elasticsearch中的概念理解 3.1、文档和字段 3.2、索引和映射 3.3、mysql与elasticsearch         elasticsearch是一款非常强大的开源搜索

    2024年02月11日
    浏览(24)
  • 【分布式搜索引擎elasticsearch】

    【分布式搜索引擎elasticsearch】

    什么是elasticsearch? 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能 什么是elastic stack(ELK)? 是以elasticsearch为核心的技术栈,包括beats、Logstash、kibana、elasticsearch elasticsearch结合kibana、Logstash、Beats,也就是elastic stack(ELK)。被广泛应用在

    2024年02月10日
    浏览(17)
  • ElasticSearch分布式搜索引擎

    ElasticSearch分布式搜索引擎

    KuangStudy ElasticSearch学习视频:狂神说ElasticSearch教程 1、官网 Elaticsearch ,简称为es,es是一个开源的 高扩展 的 分布式全文检索引擎 ,它可以近乎 实时的存储 、 检索数据; 本身扩展性很好,可以扩展到上百台服务器,处理PB级别(大数据时代)的数据。es也使用java开发并使用

    2024年02月16日
    浏览(10)
  • 【ES】【elasticsearch】分布式搜索

    【ES】【elasticsearch】分布式搜索

    因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker镜像官网https://hub.docker.com/search?q=elasticsearch 运行docker命令,部署单点es: 命令解释: -e \\\"cluster.name=es-docker-cluster\\\" :设置集群名称 -e \\\"http.host=0.0.0.0\\\" :监听的地址,可以外网访问 -e \\\"ES

    2024年02月12日
    浏览(9)
  • 【Springcloud】分布式搜索elasticsearch

    【Springcloud】分布式搜索elasticsearch

    先看下翻译: elasticsearch是一款非常强大的 开源搜索引擎 ,可以帮助我们 从海量数据中快速找到需要的内容 以下是生活中ES的使用场景: 项目在运行的时候会产生海量的日志信息,而elasticsearch结合kibana、Logstash、Beats,也就是elastic stack( ELK ),即ELK技术栈。被广泛应用在

    2024年02月08日
    浏览(11)
  • 分布式搜索引擎ElasticSearch——深入elasticSearch

    分布式搜索引擎ElasticSearch——深入elasticSearch

    聚合的分类 DSL实现Bucket聚合 DSL实现Metric聚合 RestAPI实现聚合 https://github.com/medcl/elasticsearch-analysis-pinyin DSL实现自动补全查询 Completion Suggester 修改酒店索引库数据结构 RestAPI实现自动补全查询 实现酒店搜索页面输入框的自动补全 数据同步思路分析 利用MQ实现mysql与elasticsearch数

    2024年01月17日
    浏览(25)
  • Elasticsearch 分布式搜索引擎 速学

    Elasticsearch 分布式搜索引擎 速学

            elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,它结合kibana、Logstash、Beats,也就是elastic stack(ELK)。它被广泛应用在日志数据分析、实时监控等领域,而elasticsearch是elastic stack的核心,负责存储

    2024年02月03日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包