天天看點

elasticsearch漫步走 - 第一章 - 為什麼elasticsearch搜尋這麼快?先認識一下elasticsearchelasticsearch的原理Tips - 檢視分詞結果

為什麼elasticsearch搜尋這麼快

  • 先認識一下elasticsearch
  • elasticsearch的原理
    • 分布式檔案系統
    • 反向索引
  • Tips - 檢視分詞結果

先認識一下elasticsearch

  • 還是逃避不了上來吹一波elasticsearch的牛逼之處,還有它有完整的生态圈。elasticsearch最開始是一個分布式的檢索引擎,現在把分析也加上了,看來是越來越牛逼了。還和阿裡合作了,可以去阿裡雲去看看。其相關的生态圈,資料導入有logstash,導入日志有beats。資料存儲、檢索、分析就是它本身,資料展示用kibana(完美契合)。 ELK體系已經爛大街,可自行去百度。
  • 遠古時代,介紹elasticsearch是近實時檢索,現在把近都去掉了,直接就是實時檢索。本人也使用過,通過配置的确可以做到實時(因為感覺不到延遲),但是還是要考慮性能問題(這個以後會講到)。
  • 能很好存儲結構化、非結構化、地理位置、數字等,也提供了友好的查詢方式,分析方法等。的确有很多很多的應用場景可以應用得到。

(1)Add a search box to an app or website(just search)

(2)Store and analyze logs, metrics, and security event data(日志就用elastic不會錯)

(3)Use machine learning to automatically model the behavior of your data in real time(機器學習和我也有關呢)

(4)Automate business workflows using Elasticsearch as a storage engine(存儲的事情我也可以幹)

(5)Manage, integrate, and analyze spatial information using Elasticsearch as a geographic information system (GIS)(在GIS上面有很好的應用)

(6)Store and process genetic data using Elasticsearch as a bioinformatics research tool(生物工程也有涉獵)

上面就是官方文檔裡面提到的内容。如果業務場景類似,就可以考慮使用elasticsearch羅。

elasticsearch的原理

不太想吹elasticsearch的牛逼,反正大家應該知道這個檢索引擎的确是快。但是為什麼這麼快呢,也是值得好好研究一下的。一直隻知道是分布式檔案系統,資料以檔案形式存儲,存儲在叢集的各個節點上,然後分開進行檢索然後合并,支援橫向擴充等。使用的是反向索引,是以查詢很快。我還是把這些模糊或者明确的概念好好整理一下,梳理一下知識,對自己或者其他客官也是極好的。下面介紹elasticsearch幾個重要的概念,了解之後,可能對它會有更深刻的認識和了解

分布式檔案系統

架構上的設計就使檢索計算速度很快。

分布式目前是大資料最常見的技術之一,很多地方都有應用。

分布式檔案系統,檔案系統管理的實體資源不在同一個伺服器或者節點上,可以通過計算機網絡與節點相連(可以看成網吧,有一台主機可以通過網絡給網吧内所有機器發送消息);或是若幹不同的邏輯磁盤分區或者卷标組合在一起形成的完整有層次的檔案系統。Elasticsearch的叫法是叢集,其實概念差不多。

為什麼能這麼快。舉個例子,如果有100本書,給1個人讀,可能要100天。 但是如果100本書給10個人一起讀,10天就可以完成了。這樣是不是很快呢。但是需要有一個領袖(master),它要配置設定任務,把哪些書給哪個人,給多少本書,每個人讀完書後要把心得體會進行彙總。總需要一個上司去排程安排。不管是Elasticsearch還是分布式系統,肯定都會有一個master去排程任務。

反向索引

檢索原理的設計使其在每個節點上查詢文檔的時候很快。

反向索引(Inverted Index)也叫反向索引,有反向索引必有正向索引。通俗地來講,正向索引是通過key找value,反向索引則是通過value找key。

官方文檔有說明:反向索引

感覺說得還是沒那麼具體,我隻能從網上找找羅。

(1)l lucene首先對原始文檔資料進行編号(DocID),形成清單,就是一個文檔清單

elasticsearch漫步走 - 第一章 - 為什麼elasticsearch搜尋這麼快?先認識一下elasticsearchelasticsearch的原理Tips - 檢視分詞結果

(2)建立反向索引清單l 然後對文檔中資料進行分詞,得到詞條。對詞條進行編号,以詞條建立索引。然後記錄下包含該詞條的所有文檔編号(及其它資訊)。

elasticsearch漫步走 - 第一章 - 為什麼elasticsearch搜尋這麼快?先認識一下elasticsearchelasticsearch的原理Tips - 檢視分詞結果

谷歌之父–> 谷歌、之父

反向索引建立索引的流程:

1) 首先把所有的原始資料進行編号,形成文檔清單

2) 把文檔資料進行分詞,得到很多的詞條,以詞條為索引。儲存包含這些詞條的文檔的編号資訊。搜尋的過程:當使用者輸入任意的詞條時,首先對使用者輸入的資料進行分詞,得到使用者要搜尋的所有詞條,然後拿着這些詞條去反向索引清單中進行比對。找到這些詞條就能找到包含這些詞條的所有文檔的編号。然後根據這些編号去文檔清單中找到文檔。

來源

簡單來說:把字段的内容根據一定分詞方式(一進制、多元分詞、中文分詞ik等等),分詞完後,形成詞的集合,突然想到nlp中的詞袋模型了(開個小差)。詞的集合中不但記錄了詞,還記錄了詞的頻次、位置(offset偏移量)等等。 查詢的時候,隻需要命中詞集合,就能知道有命中多少詞,每個詞的位置在哪裡。good!!這就告訴我們一個道理,把有利于提高效率的事情做在前面(資料導入時,是以使用者無法感覺),使用者隻知道檢索很快。 偶爾回想一下,的确做得高明。

Tips - 檢視分詞結果

來個小技巧:

查詢分詞結果

索引名稱/_analyze

{“text”:“我是中國人”}

elasticsearch漫步走 - 第一章 - 為什麼elasticsearch搜尋這麼快?先認識一下elasticsearchelasticsearch的原理Tips - 檢視分詞結果

就到這裡了吧。see UUU

elasticsearch-intro 官網位址

繼續閱讀