一篇认识 Elasticsearch

一、什么是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:

在这里插入图片描述

容错恢复机制:

在这里插入图片描述

数据写入存储流程:

在这里插入图片描述

存入和搜索机制:

在这里插入图片描述

三、参考书籍下载

在这里插入图片描述
在这里插入图片描述
链接:https://pan.baidu.com/s/1DDkNfoJs-10lEMy76e0r-g
提取码:ugr5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值