zoukankan      html  css  js  c++  java
  • ES系列一、Elasticsearch 概述

    一、ES 产生背景

      对于一般的公司,初期是没有那么多数据的,所以很多公司更倾向于使用传统的数据库:mysql;比如我们要查找关键字“呀呀呀”,那么查询的方式大概就是:select * from table where field like ‘%呀呀呀%’; 但是随着业务发展,数据会不断的膨胀,那么问题就来了;mysql单表查询能力即便经过了优化,它的极限也就是400W左右的数据量。而且还会经常出现查询超时的现象;

    然后很多公司开始对数据库进行横向和纵向的扩容,开始进行数据库表的“拆分”:横向拆分和纵向拆分;但是即便这样操作,仍然会出现很多问题,比如:

      1、数据库会出现单点故障问题,于是先天主从复制关系,于是增加了运维成本.
      2、因为对表的拆分,增加了后期维护的难度,同样也是增加了运维成本.
      3、即便做了大量的维护,但对于大数据的检索操作,依然很慢,完全达不到期望值.

    所以为了满足需求: 海量数据组合条件查询 、毫秒级或者秒级返回数据,ElasticSearch应运而生。

     

    二、Lucene 定义

      lucene是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎。官网地址: http://lucene.apache.org/

      Lucene实现全文检索的流程:
                    索引流程:采集数据--->构建文档对象--->创建索引(将文档写入索引库)。
                    搜索流程:创建查询--->执行搜索--->渲染搜索结果。

      

    三、ES 定义 

      ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官网地址:https://www.elastic.co/
      

    四、ES vs Lucene

       成品与半成品的关系。Lucene专注于搜索底层的建设,而ElasticSearch专注于企业应用。
       比如:Lucene相当于汽车引擎,而ES相当于汽车。
      

    五、Solr 定义

      Solr是Apache 下的一个开源项目,使用Java基于Lucene开发的全文检索服务是一个独立的企业级搜索应用服务器,它对外提供类似于Webservice的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。官网地址: https://lucene.apache.org/solr/

    六、ES vs Solr 优缺点

      

    七、ES vs Solr 

        检索速度:当单纯的对已有数据进行搜索时,Solr更快。

      

        当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
        随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
        大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。
      总结:
        二者安装都很简单。
        Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。
        Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
        Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供
        Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
        Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时搜索应用。
     

    八、ES vs 关系型数据库

      索引(Index)

         ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说,索引相当于SQL中的一个数据库,或者一个数据存储方案(schema)。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。

      类型(Type)

         类型是索引内部的逻辑分区(category/partition),然而其意义完全取决于用户需求。因此,一个索引内部可定义一个或多个类型(type)。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。类比传统的关系型数据库领域来说,类型相当于“表”。

      文档(Document)

         文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于JSON格式进行表示。文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。

  • 相关阅读:
    Java实现蓝桥杯突击战
    Java实现蓝桥杯突击战
    Java实现蓝桥杯勇者斗恶龙
    Java实现蓝桥杯勇者斗恶龙
    利用cmake来搭建开发环境
    cmake总结
    cmake手册详解----转
    Boost::filesystem 使用小笔记
    Boost学习之可移植路径操作--filesystem
    C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
  • 原文地址:https://www.cnblogs.com/gshao/p/13433480.html
Copyright © 2011-2022 走看看