自定義分析器

2021-08-17 06:58:06 字數 2055 閱讀 3904

雖然elasticsearch帶有一些現成的分析器,然而在分析器上elasticsearch真正的強大之處在於,你可以通過在乙個適合你的特定資料的設定之中組合字元過濾器、分詞器、詞彙單元過濾器來建立自定義的分析器。

在 分析與分析器 我們說過,乙個 分析器

就是在乙個包裡面組合了三種函式的乙個包裝器, 

三種函式按照順序被執行:

字元過濾器

字元過濾器 用來整理乙個尚未被分詞的字串。例如,如果我們的文字是html格式的,它會包含像或者這樣的html標籤,這些標籤是我們不想索引的。我們可以使用html清除字元過濾器來移除掉所有的html標籤,並且像把á轉換為相對應的unicode字元á這樣,轉換html實體。

乙個分析器可能有0個或者多個字元過濾器。

分詞器乙個分析器 必須

有乙個唯一的分詞器。

分詞器把字串分解成單個詞條或者詞彙單元。標準分析器裡使用的標準分詞器

把乙個字串根據單詞邊界分解成單個詞條,並且移除掉大部分的標點符號,然而還有其他不同行為的分詞器存在。

詞單元過濾器

經過分詞,作為結果的 詞單元流

會按照指定的順序通過指定的詞單元過濾器 。

詞單元過濾器可以修改、新增或者移除詞單元。我們已經提到過lowercasestop詞過濾器 ,但是在 elasticsearch 裡面還有很多可供選擇的詞單元過濾器。 詞幹過濾器 把單詞遏制為 詞幹。ascii_folding過濾器移除變音符,把乙個像"très"這樣的詞轉換為"tres"ngramedge_ngram詞單元過濾器 可以產生 

適合用於部分匹配或者自動補全的詞單元。

在 深入搜尋,我們討論了在**使用,以及怎樣使用分詞器和過濾器。但是首先,我們需要解釋一下怎樣建立自定義的分析器。

和我們之前配置

es_std分析器一樣,我們可以在analysis下的相應位置設定字元過濾器、分詞器和詞單元過濾器:

/my_index

,"tokenizer":,

"filter":,

"analyzer":}

}}作為示範,讓我們一起來建立乙個自定義分析器吧,這個分析器可以做到下面的這些事:

使用html清除字元過濾器移除html部分。

使用乙個自定義的對映字元過濾器把&替換為" 和 "::}

使用標準分詞器分詞。

小寫詞條,使用小寫詞過濾器處理。

使用自定義停止詞過濾器移除自定義的停止詞列表中包含的詞::}

我們的分析器定義用我們之前已經設定好的自定義過濾器組合了已經定義好的分詞器和過濾器::}

彙總起來,完整的建立索引請求 看起來應該像這樣:

/my_index

},"filter":},

"analyzer":}

}}}索引被建立以後,使用analyzeapi 來 

測試這個新的分析器:

/my_index

/_analyze

?analyzer

=my_analyzer

thequick

&brown fox

下面的縮略結果展示出我們的分析器正在正確地執行:

"tokens":[

,,,]

}這個分析器現在是沒有多大用處的,除非我們告訴 

elasticsearch在**用上它。我們可以像下面這樣把這個分析器應用在乙個string欄位上:

/my_index//

my_type}}

ElasticSearch 自定義分析器

elasticsearch的分析器實際上是將三個功能封裝在一起,這三個功能按照順序執行,而這三個功能都是能自定義的 字元過濾器 char filter 首先,字串按順序通過每個字元過濾器,他們的任務是在分詞前整理字串,乙個字元過濾器可以用來去掉html,或者將 轉化成and。分詞器 tokenize...

antd自定義分頁器 自定義分頁器例項

def init self,current page num,all count,request,per page num 2,pager count 11 封裝分頁相關資料 param current page num 當前訪問頁的數字 param all count 分頁資料中的資料總條數 pa...

自定義分頁器

簡單直接,上 在專案的根目錄下新建乙個包 帶有 init py檔案的資料夾 或者直接將下面的pagenation包複製到你的專案中 新建乙個py檔案,如 pagenation.py 匯入元件 mark safe 自定義類 param request request物件 param all count...