1. 程式人生 > >Java開發中的Elasticsearch分詞器的定義與用法一

Java開發中的Elasticsearch分詞器的定義與用法一

在這裡插入圖片描述
Java開發中無論是內建的分析器(analyzer),還是自定義的分析器(analyzer),都由三種構件塊組成的:character filters , tokenizers , token filters。
內建的analyzer將這些構建塊預先打包到適合不同語言和文字型別的analyzer中。Character filters (字元過濾器)字元過濾器以字元流的形式接收原始文字,並可以通過新增、刪除或更改字元來轉換該流。
舉例來說,一個字元過濾器可以用來把阿拉伯數字(٠‎١٢٣٤٥٦٧٨‎٩)‎轉成成Arabic-Latin的等價物(0123456789)。
一個分析器可能有0個或多個字元過濾器,它們按順序應用。
(PS:類似Servlet中的過濾器,或者攔截器,想象一下有一個過濾器鏈)Tokenizer (分詞器)一個分詞器接收一個字元流,並將其拆分成單個token (通常是單個單詞),並輸出一個token流。例如,一個whitespace分詞器當它看到空白的時候就會將文字拆分成token。
它會將文字“Quick brown fox!”轉換為[Quick, brown, fox!](PS:Tokenizer 負責將文字拆分成單個token ,這裡token就指的就是一個一個的單詞。就是一段文字被分割成好幾部分,相當於Java中的字串的 split )分詞器還負責記錄每個term的順序或位置,以及該term所表示的原單詞的開始和結束字元偏移量。
(PS:文字被分詞後的輸出是一個term陣列)一個分析器必須只能有一個分詞器Token filters (token過濾器)token過濾器接收token流,並且可能會新增、刪除或更改tokens。
例如,一個lowercase token filter可以將所有的token轉成小寫。stop token filter可以刪除常用的單詞,比如 the 。
synonym token filter可以將同義詞引入token流。
不允許token過濾器更改每個token的位置或字元偏移量。一個分析器可能有0個或多個token過濾器,它們按順序應用。
小結&回顧analyzer(分析器)是一個包,這個包由三部分組成,分別是:character filters (字元過濾器)、tokenizer(分詞器)、token filters(token過濾器)一個analyzer可以有0個或多個character filters一個analyzer有且只能有一個tokenizer一個analyzer可以有0個或多個token filterscharacter filter 是做字元轉換的,它接收的是文字字元流,輸出也是字元流tokenizer 是做分詞的,它接收字元流,輸出token流(文字拆分後變成一個一個單詞,這些單詞叫token)token filter 是做token過濾的,它接收token流,輸出也是token流由此可見,整個analyzer要做的事情就是將文字拆分成單個單詞,文字 ----> 字元 ----> token
在這裡插入圖片描述


這就好比是攔截器
在這裡插入圖片描述
在這裡插入圖片描述
文章來自:https://www.itjmd.com/news/show-5316.html