天天看點

深入了解Elasticsearch(原書第2版)》一1.1.3 分析資料

本節書摘來華章計算機《深入了解elasticsearch(原書第2版)》一書中的第1章 ,第1.1.3節,[美]拉斐爾·酷奇(rafal ku) 馬雷克·羅戈任斯基(marek rogoziski)著 張世武 餘洪淼 商旦 譯 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

讀者也許會好奇,文檔中的資料是如何轉化為反向索引的?查詢串又是怎麼轉換為可以用于搜尋的詞項的?這個轉換過程被稱為分析(analysis)。

文本分析由分析器來執行,它建立在分詞器(tokenizer)、過濾器(filter)及字元映射器(character mapper)之上。

lucene的分詞器用來将文本切割成詞條,詞條是攜帶各種額外資訊的詞項,這些資訊包括:詞項在原始文本中的位置,詞項的長度。分詞器工作的結果被稱為詞條流,因為這些詞條被一個接一個地推送給過濾器處理。

除了分詞器,過濾器也是lucene分析器的組成部分。過濾器數額可選,可以為零個、一個或多個,用于處理詞條流中的詞條。例如,它可以移除、修改詞條流中的詞條,甚至可以創造新的詞條。lucene中有很多現成的過濾器,你也可以根據需要實作新的過濾器。以下是一些過濾器的例子。

小寫過濾器:将所有詞條轉化為小寫。

ascii過濾器:移除詞條中所有非ascii字元。

同義詞過濾器:根據同義詞規則,将一個詞條轉化為另一個詞條。

多語言詞幹還原過濾器:将詞條的文本部分歸約到它們的詞根形式,即詞幹還原。當分析器中有多個過濾器時,會逐個處理,理論上可以有無限多個過濾器。

過濾器可以一個接一個地被調用,是以我們可以通過逐個添加多個過濾器的方式來獲得近乎無限的分析能力。

最後我們介紹字元映射器,它用于調用分詞器之前的文本預處理操作。字元映射器的一個例子就是html文本的去标簽處理。

索引與查詢

也許讀者會好奇,lucene以及所有基于lucene的軟體是如何控制索引及查詢操作的?在索引期,lucene會使用你選擇的分析器來處理文檔中的内容,可以對不同的字段使用不同的分析器,例如,文檔的title字段與description字段就可以使用不同的分析器。

在檢索時,如果你使用了某個查詢分析器(query parser),那麼你的查詢串将會被分析。當然,你也可以選擇不分析資料。有一點需要牢記,elasticsearch中有些查詢會被分析,而有些則不會被分析。例如,字首查詢(prefix query)不會被分析,而比對查詢(match query)會被分析。

你還應該記住,索引期與檢索期的文本分析要采用同樣的分析器,隻有查詢(query)分詞出來的詞項與索引中詞項能比對上,才會傳回預期的文檔集。例如,如果在索引期使用了詞幹還原與小寫轉換,那麼在查詢期,也應該對查詢串做相同的處理,否則,查詢可能不會傳回任何結果。

繼續閱讀