美文网首页
ES 分布式搜索入门

ES 分布式搜索入门

作者: 小P聊技术 | 来源:发表于2021-02-28 09:51 被阅读0次

    1 主流分布式搜索引擎

    1.1 Lucene

    Lucense官网地址http://lucene.apache.org

    Lucene是一套用于全文检索搜索开放源码程序库,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索。Lucene是现在最受欢迎的免费Java信息检索程序库。

    1.2 Solr

    Solr官网地址https://lucene.apache.org/solr/

    Solr(读作“solar”)是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示[1]分面搜索、动态聚类、数据库集成,以及富文本(如WordPDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。Solr是最流行的企业级搜索引擎,[2]Solr 4还增加了NoSQL支持。[3]

    Solr是用Java编写、运行在Servlet容器(如Apache TomcatJetty)的一个独立的全文搜索服务器。 Solr采用了Lucene Java搜索库为核心的全文索引和搜索,并具有类似RESTHTTP/XMLJSONAPI。 Solr强大的外部配置功能使得无需进行Java编码,便可对其进行调整以适应多种类型的应用程序。Solr有一个插件架构,以支持更多的高级定制。

    因为2010年Apache Lucene和Apache Solr项目合并,两个项目是由同一个Apache软件基金会开发团队制作实现的。提到技术或产品时,Lucene/Solr或Solr/Lucene是一样的。

    1.3 Elasticsearch

    ElasticSearch官网地址https://www.elastic.co/cn/elasticsearch/

    Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎,具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的,并在Apache许可证下作为开源软件发布。官方客户端在Java.NETC#)、PHPPythonApache GroovyRuby和许多其他语言中都是可用的。[5]根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。[6]

    Elasticsearch是与名为Logstash的数据收集和日志解析引擎以及名为Kibana的分析和可视化平台一起开发。这三个产品被设计成一个集成解决方案,称为“Elastic Stack”(以前称为“ELK stack”)。

    Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。[5]”Elasticsearch是分布式的,这意味着索引可以被分成分片,每个分片可以有0个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片。再平衡和路由是自动完成的。“[5]相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。[7]

    Elasticsearch使用Lucene,并试图通过JSON和Java API提供其所有特性。它支持facetting和percolating[8],如果新文档与注册查询匹配,这对于通知非常有用。

    另一个特性称为“网关”,处理索引的长期持久性;例如,在服务器崩溃的情况下,可以从网关恢复索引。[9]Elasticsearch支持实时GET请求,适合作为NoSQL数据存储[10],但缺少分布式事务。[11]

    2 ES核心术语

    2.1 基础术语

    Index

    索引,包含了一堆有相似数据结构的文档数据,比如电影索引,一个索引包含很多document,一个索引就代表一类相似或者相同的document。

    索引简单来说就相对于关系型数据库的库

    Type

    类型,每个索引里可以有一个或者多个type,type是index的一个逻辑分类,例如建立电影的索引,电影可以分为多个type:科幻type、喜剧 type、魔幻type等等。每个type下的document中的field可能是不一样的。

    类型简单来说就相对于关系型数据库的表

    Document

    文档是信息的基本单元,一个document相当于一条数据,是可以被索引的,文档是以JSON的格式表现的。

    文档相对于关系型数据库的行

    Field

    字段,document由多个field组成,不同类型的document里面同名的field一定具有相同的类型。

    Mapping

    Mapping 类似于关系数据库的表结构定义 schema

    2.2 集群相关

    Near Realtime

    近实时,有两层含义:

    • 从写入数据到数据可以被搜索到有一个小延迟(大概是 1s)

    • 基于 es 执行搜索和分析可以达到秒级

    Cluster 集群

    集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。

    Node 节点

    Node 是集群中的一个节点,每个节点有一个唯一的名称,这个名称默认是随机分配的。默认节点会去加入一个名称为elasticsearch的集群。如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成 elasticsearch集群。

    shard

    单台机器无法存储大量数据,es 可以将一个索引中的数据切分为多个 shard,分布在多台服务器上存储。有了 shard 就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。每个 shard 都是一个 Lucene index。

    replica

    任何一个服务器随时可能故障或宕机,此时 shard 可能就会丢失,因此可以为每个 shard 创建多个 replica 副本。replica 可以在 shard 故障时提供备用服务,保证数据不丢失,多个 replica 还可以提升搜索操作的吞吐量和性能。primary shard(建立索引时一次设置,不能修改,默认 5 个),replica shard(随时修改数量,默认 1 个),默认每个索引 10 个 shard,5 个 primary shard,5个 replica shard,最小的高可用配置,是 2 台服务器。

    这么说吧,shard 分为 primary shard(主分片) 和 replica shard(备份节点)。而 primary shard 一般简称为 shard,而 replica shard 一般简称为 replica。

    3 倒排索引

    源数据

    文档ID 文档内容
    1 elasticsearch是最流行的搜索引擎
    2 php是世界上最好的语言
    3 搜索引擎是如何诞生的

    倒排索引

    单词 文档ids 词频TF:位置POS
    elasticsearch 1 1:1:<1>
    流行 1 1:1:<2>
    搜索引擎 1,3 1:1:<3>,3:1:<1>
    php 2 2:1:<1>
    世界 2 2:1:<2>
    最好 2 2:1:<3>
    语言 2 2:1:<4>
    如何 3 3:1:<2>
    诞生 3 3:1:<3>

    1:1:<3>,3:1:<1>代表的含义

    DocId TF Position
    1 1 3
    3 1 1

    docId: 文档ID

    TF: 代表分词项在某个点文档中出现的次数(term frequency)

    Position: 某个单词的所有文档的文档列表及单词在该文档中出现的位置信息

    倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项,都包含一个属性值和包含该属性值的各个记录地址。由于不是根据记录来确定属性,而是根据属性来确定记录的位置,所以称之为倒排索引。

    4 相关信息

    • 博文不易,辛苦各位猿友点个关注和赞,感谢

    相关文章

      网友评论

          本文标题:ES 分布式搜索入门

          本文链接:https://www.haomeiwen.com/subject/fptgfltx.html