互聯網搜索核心組件:Lucene 20 歲生日啦

前言

你用過Elasticsearch麼?那你知道Elasticsearch底層是基於什麼技術演化而來的麼?相信用過ES並深刻了解過ES的都知道,ES是基於Lucene,隱藏複雜性,提供簡單易用的restful api接口、java api接口、其餘語言的接口。如今Lucene從誕生到如今已經20年了,Happy Birthday , Lucene!ES官網還特地爲Lucene慶生,連接:https://www.elastic.co/cn/cel...html

ES做者基於Lucene的傳說

關於elasticsearch的一個傳說,有一個程序員失業了,陪着本身老婆去英國倫敦學習廚師課程。程序員在失業期間想給老婆寫一個菜譜搜索引擎,以爲lucene實在太複雜了,就開發了一個封裝了lucene的開源項目,compass。後來程序員找到了工做,是作分佈式的高性能項目的,以爲compass不夠,就寫了elasticsearch,讓lucene變成分佈式的系統。 今天咱們乘着Lucene的20歲生日一塊兒溫習一下Lucene和ES的核心概念。java

Lucene 的核心概念

  1. IndexWriter

lucene中最重要的的類之一,它主要是用來將文檔加入索引,同時控制索引過程當中的一些參數使用。程序員

  1. Analyzer

分析器,主要用於分析搜索引擎遇到的各類文本。經常使用的有StandardAnalyzer分析器,StopAnalyzer分析器,WhitespaceAnalyzer分析器等。數據庫

  1. Directory

索引存放的位置;lucene提供了兩種索引存放的位置,一種是磁盤,一種是內存。通常狀況將索引放在磁盤上;相應地lucene提供了FSDirectory和RAMDirectory兩個類。api

  1. Document

文檔;Document至關於一個要進行索引的單元,任何能夠想要被索引的文件都必須轉化爲Document對象才能進行索引。服務器

  1. Field

相似於數據庫中的一個字段,存儲了key-value值。restful

  1. IndexSearcher

是lucene中最基本的檢索工具,全部的檢索都會用到IndexSearcher工具;數據結構

  1. Query

Query相似關係型數據庫中的SQL語句。與關係型數據庫相似,Lucene提供瞭如下的基本查詢:精確查詢xxx = ? TermQuery、範圍查詢 xxx BETWEEN? AND ? PointRangeQuery、模糊查詢 xxx LIKE ‘%?%’ PrefixQuery、RegexpQuery、組合查詢 (…) AND (…) OR (…) BooleanQueryapp

  1. QueryParser

是一個解析用戶輸入的工具,能夠經過掃描用戶輸入的字符串,生成Query對象。運維

  1. Hits

在搜索完成以後,須要把搜索結果返回並顯示給用戶,只有這樣纔算是完成搜索的目的。在Lucene中,搜索的結果的集合是用Hits類的實例來表示的。

ES 的核心概念

  1. Near Realtime(NRT):近實時,兩個意思,從寫入數據到數據能夠被搜索到有一個小延遲(大概1秒);基於es執行搜索和分析能夠達到秒級
  2. Cluster:集羣,包含多個節點,每一個節點屬於哪一個集羣是經過一個配置(集羣名稱,默認是elasticsearch)來決定的,對於中小型應用來講,剛開始一個集羣就一個節點很正常。
  3. Node:節點,集羣中的一個節點,節點也有一個名稱(默認是隨機分配的),節點名稱很重要(在執行運維管理操做的時候),默認節點會去加入一個名稱爲「elasticsearch」的集羣,若是直接啓動一堆節點,那麼它們會自動組成一個elasticsearch集羣,固然一個節點也能夠組成一個elasticsearch集羣
  4. Document&field:文檔,es中的最小數據單元,一個document能夠是一條客戶數據,一條商品分類數據,一條訂單數據,一般用JSON數據結構表示,每一個index下的type中,均可以去存儲多個document。一個document裏面有多個field,每一個field就是一個數據字段。
  5. Index:索引,包含一堆有類似結構的文檔數據,好比能夠有一個客戶索引,商品分類索引,訂單索引,索引有一個名稱。一個index包含不少document,一個index就表明了一類相似的或者相同的document。好比說創建一個product index,商品索引,裏面可能就存放了全部的商品數據,全部的商品document。
  6. Type:ES 7.x 版本已經廢除Type,關於爲何取消,能夠參考 :

https://www.elastic.co/guide/...
類型,每一個索引裏均可以有一個或多個type,type是index中的一個邏輯數據分類,一個type下的document,都有相同的field,好比博客系統,有一個索引,能夠定義用戶數據type,博客數據type,評論數據type。

  1. shard:單臺機器沒法存儲大量數據,es能夠將一個索引中的數據切分爲多個shard,分佈在多臺服務器上存儲。有了shard就能夠橫向擴展,存儲更多數據,讓搜索和分析等操做分佈到多臺服務器上去執行,提高吞吐量和性能。每一個shard都是一個lucene index。
  2. replica:任何一個服務器隨時可能故障或宕機,此時shard可能就會丟失,所以能夠爲每一個shard建立多個replica副本。replica能夠在shard故障時提供備用服務,保證數據不丟失,多個replica還能夠提高搜索操做的吞吐量和性能。primary shard(創建索引時一次設置,不能修改,默認5個),replica shard(隨時修改數量,默認1個),默認每一個索引10個shard,5個primary shard,5個replica shard,最小的高可用配置,是2臺服務器。

本文由博客一文多發平臺 OpenWrite 發佈!
相關文章
相關標籤/搜索