ES的简单介绍

什么是ElasticSearch?

ElasticSearch是一个实时分布式搜索和分析引擎,它用于全文搜索结构化搜索分析以及将这三者混合使用。

现在有哪些公司用到?

维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type)搜索纠错(did-you-mean)等搜索建议功能。

英国卫报使用Elasticsearch结合用户日志和社交网络数据提供给他们的编辑以实时的反馈,以便及时了解公众对新发表的文章的回应。

StackOverflow结合全文搜索与地理位置查询,以及more-like-this (更多相关问题)功能来找到相关的问题和答案。

Github使用Elasticsearch检索1300亿行的代码。

对比传统数据库(Mysql)查询

  1. 《倚天屠龙记》的所有篇章中,要找出所有出现周芷若的章节。mysql如何查询?

  2. 淘宝现在有上亿商品条目,每个商品的品牌,种类,用途,价格,描述都是不同的。用户输入能50倍变焦的手机,Mysql如何查询?

  3. 用户输入整容,在百度百科中快速找到有整容相关字段的文章。Mysql如何查询。

    结论: 现在大部分数据库在提取可用知识方面显得异常无能。它们能够通过时间戳或者精确匹配做过滤,但是它们能够进行全文搜索,处理同义词和根据相关性给文档打分吗?它们能根据同一份数据生成分析和聚合的结果吗?大部分数据库在对模糊搜索的处理上,性能很差。

对比传统数据库(Mysql)的存储方式

现在有这样一个对象,要把他存到数据库中:

{
  "errorCode": 0,
  "msg": "success",
  "data": {
    "list": {
      "current_page": 1,
      "data": [
        {
          "mobile": "17623232323",
          "intention": 1,
          "share_name": "本",
          "share_mobile": "13912345678",
          "create_date": "2019-03-06 13:05:41"
        },
        {
          "mobile": "17812345678",
          "intention": 1,
          "share_name": "老刘",
          "share_mobile": "13512345678",
          "create_date": "2019-03-05 14:05:18"
        }
      ],
      "to": 2,
      "total": 2
    }
  }
}

Mysql适合存储一一对应的关系数据,对于这种对象中包含对象,对象中包含数组的数据结构不是很擅长。Mysql处理这种数据一般是创建多个表,关联他们的关系。如果对象更复杂,数据更多的时候,那连表查询也是很大的性能消耗,而且后期加减字段的代价都很大。

现在有Elasticsearch这个解决方案。Elasticsearch面向文档(document oriented)的,直接将整个对象用JSON的方式存储。这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储,还会索引(index)每个文档的内容使之可以被搜索。

Mysql -> Databases -> Tables -> Rows -> Columns
ES -> Indices -> Types -> Documents -> Fields

关于ElasticSearch的几个关系

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。

Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。

Lucene的使用异常复杂,需要使用者深入了解检索相关的知识来使用他,使用成本和学习成本都很高。所以ES出现了。Elasticsearch使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。而且ES在其基础上还扩展了很多个功能。

关于ES起源的小趣闻

多年前,一个叫做Shay Banon的刚结婚不久的失业开发者,由于妻子要去伦敦学习厨师,他便跟着也去了。在他找工作的过程中,为了给妻子构建一个食谱的搜索引擎,他开始构建一个早期版本的Lucene。

直接基于Lucene工作会比较困难,所以Shay开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。

后来Shay找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。

第一个公开版本出现在2010年2月,在那之后Elasticsearch已经成为Github上最受欢迎的项目之一,代码贡献者超过300人。一家主营Elasticsearch的公司就此成立,他们一边提供商业支持一边开发新功能,不过Elasticsearch将永远开源且对所有人可用。

Shay的妻子依旧等待着她的食谱搜索……(意思是妻子还没有用到)

你可能感兴趣的:(ES的简单介绍)