探索ElasticSearch-Lucene入門(六)

前言

也算是使用了ElasticSearch一段時間了,可是仍是沒有仔細看過Lucene相關的內容。今天來系統小結下。java

這篇文章主要談論Lucene的基本架構,倒排索引分詞器,如何使用查詢語法查詢Lucene以及LuceneElasticSearch的區別和聯繫。數組

Lucene

基本架構

  • 文檔:索引和搜索的主要的數據載體,包含多個字段。
  • 字段:多個字段組成一個文檔。包含具體的信息。
  • 詞項:由term翻譯而來。能夠簡單理解爲具體的信息中拆分出來的一個個單詞。
  • 詞條:由token翻譯而來。詞項在文本中的一次出現。不只包含詞項的內容,並且包含開始的位置,結束的位置等信息。
  • 段:由Segment翻譯而來。每一個段只會被建立一次,段一但被建立了以後就不會被修改。因此,會存在段合併的過程,減小段的數量,並且搜索的性能也會提高。段中數據的刪除只會在段合併的過程當中進行。

term和token的區別是什麼? 舉個例子,有下面一段文本。My brother love ElasticSearch.I love ElasticSearch,too. token爲My,brother,love,ElasticSearch,I,love,ElasticSearch,too term爲My,brother,love,ElasticSearch,I,toobash

倒排索引

簡單來講,倒排索引最主要的一個特色是面向term創建索引的,而不是面向文檔創建索引的。 舉個例子,假若有下面這幾個文檔。架構

doc1:I love ElasticSearch
doc2:I love Java
doc3:I hate sleeping
複製代碼

若是使用傳統面向文檔的方式創建索引,那麼當使用love進行搜索的時候,須要先遍歷doc1中全部的字段,再遍歷doc2中全部的字段,依次遍歷,直到最後一個doc,纔可以肯定存在love這個單詞的文檔是doc1,doc2elasticsearch

若是使用的是倒排索引呢?分佈式

那麼會組成如下的倒排索引。性能

Term Doc
I doc1,doc2,doc3
love doc1,doc2
elasticsearch doc1
java doc2
sleeping doc3

那麼,當使用love來搜索的時候,最多隻須要遍歷一遍就可以查詢到結果。直接返回doc1,doc2。優點在於只要匹配到了term,就能夠直接返回。無需像傳統索引同樣遍歷全部的文檔。spa

分詞器

一段文本在Lucene中被轉化爲一個一個可用於搜索的詞項的過程叫作分析。有時候也會叫作分詞。在Lucene中是使用分詞器來進行分析(分詞)的行爲的。翻譯

舉個例子code

I love ElasticSearch  ->  [I,love,elasticsearch]
複製代碼

這裏就是原來的文本被分詞器轉換爲多個詞項。

文本分析由分析器執行,而分析器又由字符過濾器,分詞器和字符映射器組成。

那麼這三個組成又分別有什麼做用呢?

舉個例子。存在下面這樣文本。

I love! ElasticSearch.
複製代碼

通過了字符過濾器以後

I love! ElasticSearch.   -> I lvoe ElasticSearch
複製代碼

字符過濾器是去掉在本來文本中存在的一些不合適的字符,好比.等。過濾器將本來存在多種不合適的字符流轉化爲合適的字符流。

接着,會通過分詞器。

I love ElasticSearch -> [I,love,ElasticSearch]
複製代碼

分詞器會原來的字符流轉化爲多個詞項的數組。最終能夠經過這些詞項搜索。

[I,love,ElasticSearch] -> [I,love,elasticsearch]
複製代碼

最後,字符映射器會將最原始的詞項統一格式,好比都轉化爲小寫的詞項。這個被轉化後的詞項纔會被Lucene存放。

固然,這是默認的標準分析器採用的規則。不一樣的分析器可使用不一樣的字符過濾器,分詞器和字符映射器來完成分析的工做。

查詢語法

由查詢內容和操做符組合而成。

Lucene與ElasticSearch的聯繫

首先,ElasticSearch正是基於Lucene開發的。相對於Lucene擁有輕量級,獨立性的特色來講。ElasticSearch具備的特色就是分佈式,可擴展,高可用的特色。

關於寫做

之後這裏天天都會寫一篇文章,題材不限,內容不限,字數不限。儘可能把本身天天的思考都放入其中。

若是這篇文章給你帶來了一些幫助,能夠動動手指點個贊,順便關注一波就更好了。

若是上面都沒有,那麼寫下讀完以後最想說的話?有效的反饋和你的鼓勵是對我最大的幫助。

另外打算把博客給從新撿起來了。歡迎你們來訪問吃西瓜

我是shane。今天是2019年9月6日。百天寫做計劃的第四十四天,44/100。

相關文章
相關標籤/搜索