博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一篇认识 Elasticsearch
阅读量:3904 次
发布时间:2019-05-23

本文共 3024 字,大约阅读时间需要 10 分钟。

一篇认识 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:

在这里插入图片描述

容错恢复机制:

在这里插入图片描述

数据写入存储流程:

在这里插入图片描述

存入和搜索机制:

在这里插入图片描述

三、参考书籍下载

在这里插入图片描述

在这里插入图片描述
链接:
提取码:ugr5

转载地址:http://eomen.baihongyu.com/

你可能感兴趣的文章
Hash in Python
查看>>
取模运算和求余运算的区别
查看>>
Modulo and Reminder
查看>>
Round robin
查看>>
consistent hashing
查看>>
Inverted Index
查看>>
Crawler
查看>>
Bloom Filter
查看>>
Dynamic Programming
查看>>
Python Singleton
查看>>
Python hashmap
查看>>
python 切片
查看>>
interview sum
查看>>
HTTPs Control
查看>>
澳洲孕维生素
查看>>
Prenatal Vitamin Brands
查看>>
has_key or in
查看>>
Python sort list customisation
查看>>
Python sort dict by value
查看>>
Python collections deque - double-ended queue ()
查看>>