ES的簡單介紹

什么是ElasticSearch?

ElasticSearch是一個(gè)實(shí)時(shí)分布式搜索和分析引擎,它用于全文搜索、結(jié)構(gòu)化搜索、分析以及將這三者混合使用。

現(xiàn)在有哪些公司用到?

維基百科使用Elasticsearch提供全文搜索并高亮關(guān)鍵字,以及輸入實(shí)時(shí)搜索(search-as-you-type)搜索糾錯(cuò)(did-you-mean)等搜索建議功能。

英國衛(wèi)報(bào)使用Elasticsearch結(jié)合用戶日志和社交網(wǎng)絡(luò)數(shù)據(jù)提供給他們的編輯以實(shí)時(shí)的反饋,以便及時(shí)了解公眾對(duì)新發(fā)表的文章的回應(yīng)。

StackOverflow結(jié)合全文搜索與地理位置查詢,以及more-like-this (更多相關(guān)問題)功能來找到相關(guān)的問題和答案。

Github使用Elasticsearch檢索1300億行的代碼。

對(duì)比傳統(tǒng)數(shù)據(jù)庫(Mysql)查詢

  1. 《倚天屠龍記》的所有篇章中,要找出所有出現(xiàn)周芷若的章節(jié)。mysql如何查詢?

  2. 淘寶現(xiàn)在有上億商品條目,每個(gè)商品的品牌,種類,用途,價(jià)格,描述都是不同的。用戶輸入能50倍變焦的手機(jī),Mysql如何查詢?

  3. 用戶輸入整容,在百度百科中快速找到有整容相關(guān)字段的文章。Mysql如何查詢。

    結(jié)論: 現(xiàn)在大部分?jǐn)?shù)據(jù)庫在提取可用知識(shí)方面顯得異常無能。它們能夠通過時(shí)間戳或者精確匹配做過濾,但是它們能夠進(jìn)行全文搜索,處理同義詞和根據(jù)相關(guān)性給文檔打分嗎?它們能根據(jù)同一份數(shù)據(jù)生成分析和聚合的結(jié)果嗎?大部分?jǐn)?shù)據(jù)庫在對(duì)模糊搜索的處理上,性能很差。

對(duì)比傳統(tǒng)數(shù)據(jù)庫(Mysql)的存儲(chǔ)方式

現(xiàn)在有這樣一個(gè)對(duì)象,要把他存到數(shù)據(jù)庫中:

{
  "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適合存儲(chǔ)一一對(duì)應(yīng)的關(guān)系數(shù)據(jù),對(duì)于這種對(duì)象中包含對(duì)象,對(duì)象中包含數(shù)組的數(shù)據(jù)結(jié)構(gòu)不是很擅長。Mysql處理這種數(shù)據(jù)一般是創(chuàng)建多個(gè)表,關(guān)聯(lián)他們的關(guān)系。如果對(duì)象更復(fù)雜,數(shù)據(jù)更多的時(shí)候,那連表查詢也是很大的性能消耗,而且后期加減字段的代價(jià)都很大。

現(xiàn)在有Elasticsearch這個(gè)解決方案。Elasticsearch面向文檔(document oriented)的,直接將整個(gè)對(duì)象用JSON的方式存儲(chǔ)。這意味著它可以存儲(chǔ)整個(gè)對(duì)象或文檔(document)。然而它不僅僅是存儲(chǔ),還會(huì)索引(index)每個(gè)文檔的內(nèi)容使之可以被搜索。

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

關(guān)于ElasticSearch的幾個(gè)關(guān)系

Elasticsearch是一個(gè)基于Apache Lucene(TM)的開源搜索引擎。

Lucene可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的、功能最全的搜索引擎庫。

Lucene的使用異常復(fù)雜,需要使用者深入了解檢索相關(guān)的知識(shí)來使用他,使用成本和學(xué)習(xí)成本都很高。所以ES出現(xiàn)了。Elasticsearch使用Java開發(fā)并使用Lucene作為其核心來實(shí)現(xiàn)所有索引和搜索的功能,它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單。而且ES在其基礎(chǔ)上還擴(kuò)展了很多個(gè)功能。

關(guān)于ES起源的小趣聞

多年前,一個(gè)叫做Shay Banon的剛結(jié)婚不久的失業(yè)開發(fā)者,由于妻子要去倫敦學(xué)習(xí)廚師,他便跟著也去了。在他找工作的過程中,為了給妻子構(gòu)建一個(gè)食譜的搜索引擎,他開始構(gòu)建一個(gè)早期版本的Lucene。

直接基于Lucene工作會(huì)比較困難,所以Shay開始抽象Lucene代碼以便Java程序員可以在應(yīng)用中添加搜索功能。他發(fā)布了他的第一個(gè)開源項(xiàng)目,叫做“Compass”。

后來Shay找到一份工作,這份工作處在高性能和內(nèi)存數(shù)據(jù)網(wǎng)格的分布式環(huán)境中,因此高性能的、實(shí)時(shí)的、分布式的搜索引擎也是理所當(dāng)然需要的。然后他決定重寫Compass庫使其成為一個(gè)獨(dú)立的服務(wù)叫做Elasticsearch。

第一個(gè)公開版本出現(xiàn)在2010年2月,在那之后Elasticsearch已經(jīng)成為Github上最受歡迎的項(xiàng)目之一,代碼貢獻(xiàn)者超過300人。一家主營Elasticsearch的公司就此成立,他們一邊提供商業(yè)支持一邊開發(fā)新功能,不過Elasticsearch將永遠(yuǎn)開源且對(duì)所有人可用。

Shay的妻子依舊等待著她的食譜搜索……(意思是妻子還沒有用到)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Solr&ElasticSearch原理及應(yīng)用 一、綜述 搜索 http://baike.baidu.com/it...
    樓外樓V閱讀 7,661評(píng)論 1 17
  • 今天看到一位朋友寫的mysql筆記總結(jié),覺得寫的很詳細(xì)很用心,這里轉(zhuǎn)載一下,供大家參考下,也希望大家能關(guān)注他原文地...
    信仰與初衷閱讀 4,842評(píng)論 0 30
  • 前言 最近項(xiàng)目組安排了一個(gè)任務(wù),項(xiàng)目中用到了基于 Solr 的全文搜索,但是該 Solr 搜索云項(xiàng)目不穩(wěn)定,經(jīng)常查...
    printf200閱讀 1,617評(píng)論 0 6
  • 前言 最近項(xiàng)目組安排了一個(gè)任務(wù),項(xiàng)目中用到了基于 Solr 的全文搜索,但是該 Solr 搜索云項(xiàng)目不穩(wěn)定,經(jīng)常查...
    zwb_jianshu閱讀 2,739評(píng)論 0 2
  • Elastic+logstash+head簡單介紹 一. 概述 ElasticSearch是一個(gè)基于Lucene的...
    柒月失凄閱讀 4,704評(píng)論 0 4

友情鏈接更多精彩內(nèi)容