网站链接: element-ui dtcms
当前位置: 首页 > 技术博文  > 技术博文

一篇认识 Elasticsearch

2021/6/25 13:45:35 人评论

一篇认识 Elasticsearch一、什么是Elasticsearch1.简介2.使用案例3.跟solr的比较二、深入了解1.核心概念2.Elasticsearch与Mysql数据库的比较3.存入、搜索、容错原理图示:倒排索引原理:单node环境下创建index:两个node环境下创建index:容错恢…

一篇认识 Elasticsearch

  • 一、什么是Elasticsearch
    • 1.简介
    • 2.使用案例
    • 3.跟solr的比较
  • 二、深入了解
    • 1.核心概念
    • 2.Elasticsearch与Mysql数据库的比较
    • 3.存入、搜索、容错原理图示:
        • 倒排索引原理:
        • 单node环境下创建index:
        • 两个node环境下创建index:
        • 容错恢复机制:
        • 数据写入存储流程:
        • 存入和搜索机制:

一、什么是Elasticsearch

1.简介

Elasticsearch 是在 Apache Lucene 上构建的开源 RESTful 分布式搜索和分析引擎。自从 2010 年发布以来,Elasticsearch 已经快速地成为最流行的搜索引擎,常用于日志分析、全文搜索、安全智能、业务分析和运维智能使用案例。
因为他是分布式的,可扩展在多个服务器上;同时它还是实时的, 所以它可以用很快的速度去处理大量级的数据。
它在使用上不像Lucene那么复杂,上手非常简单。它附带了很多非常合理的默认值,这让初学者很好地避免一上手就要面对复杂的理论,它安装好了就可以使用了,用很小的学习成本就可以变得很有生产力。上手简单并不代表它的功能少,随着越学越深入,还可以利用Elasticsearch更多高级的功能,整个引擎可以很灵活地进行配置。你可以轻松地通过客户端或者任何你喜欢的程序语言与Elasticsearch的RESTful API进行交流。

2.使用案例

  • 维基百科使用Elasticsearch来进行全文搜做并高亮显示关键词。
  • The Guardian(国外新闻网站),类似搜狐新闻,用户行为日志(点击,浏览,收藏,评论)+ 社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)。
  • StackOverflow(国外的程序异常讨论论坛)将全文搜索与地理位置和相关信息进行结合,以提供more-like-this相关问题的展现。
  • GitHub使用Elasticsearch来检索超过上千亿行代码。
  • Goldman Sachs使用它来处理数TB数据的索引,还有很多投行使用它来分析股票市场的变动。
  • 国内:站内搜索(电商,招聘,门户,等等),IT系统搜索(OA,CRM,ERP,等等),数据分析(ES热门的一个使用场景)

3.跟solr的比较

Solr 是Apache Lucene项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、分面搜索、动态聚类、数据库集成,以及富文本(如Word、PDF)的处理。Solr是高度可扩展的,并提供了分布式搜索和索引复制。 Solr是用Java编写、运行在Servlet容器(如 Apache Tomcat 或Jetty)的一个独立的全文搜索服务器。 Solr采用了 Lucene Java 搜索库为核心的全文索引和搜索。

solor 优点:

  1. Solr有一个更大、更成熟的用户、开发和贡献者社区。
  2. 支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
  3. 不考虑建索引的同时进行搜索,速度更快。

缺点也很明显: 那就是建立索引时,搜索效率下降,实时索引搜索效率不高。

ES 跟 solr的比较:
1. 当单纯的对已有数据进行搜索时,Solr更快。
2. 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
3.随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
综上所述,Solr的架构不适合实时搜索的应用。

二、深入了解

1.核心概念

  1. 近实时:从写入数据到数据可以被搜索到有一个小延迟(大概1秒)

  2. Cluster(集群)
    集群包含多个节点,每个节点构成集群。

  3. Node(节点)
    节点通常代表一个服务器,默认节点会去加入一个名称为“elasticsearch”的集群,如果直接启动一堆节点,那么它们会自动组成一个elasticsearch集群,当然一个节点也可以组成一个elasticsearch集群。

  4. Index(索引-数据库)
    索引包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的document。

  5. Type(类型-表)
    每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document,都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type。

  6. .Document(文档-行)
    一个document可以是一条客户数据,一条商品分类数据,一条订单数据,通常用JSON数据结构表示,每个index下的type中,都可以去存储多个document。

  7. Field(字段-列)
    一个document里面有多个field,每个field就是一个数据字段.

  8. mapping(映射-约束)
    数据如何存放到索引对象上,需要有一个映射配置,包括:数据类型、是否存储、是否分词等。
    这样就创建了一个名为blog的Index。Type不用单独创建,在创建Mapping 时指定就可以。Mapping用来定义Document中每个字段的类型,即所使用的 analyzer、是否索引等属性,非常关键等。创建Mapping 的代码示例如下:

     client.indices.putMapping({
        index : 'blog',
        type : 'article',
        body : {
            article: {
                properties: {
                    id: {
                        type: 'string',
                        analyzer: 'ik',
                        store: 'yes',
                    },
                    title: {
                        type: 'string',
                        analyzer: 'ik',
                        store: 'no',
                    },
                    content: {
                        type: 'string',
                        analyzer: 'ik',
                        store: 'yes',
                    }
                }
            }
        }
    });
    
    

2.Elasticsearch与Mysql数据库的比较

关系型数据库(比如Mysql)非关系型数据库(Elasticsearch)
数据库Database索引Index
表Table类型Type
数据行Row文档Document
数据列Column字段Field
约束 Schema映射Mapping

3.存入、搜索、容错原理图示:

倒排索引原理:

在这里插入图片描述

单node环境下创建index:

在这里插入图片描述

两个node环境下创建index:

在这里插入图片描述

容错恢复机制:

在这里插入图片描述

数据写入存储流程:

在这里插入图片描述

存入和搜索机制:

在这里插入图片描述

相关资讯

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?