ayalysis以往對(duì)于我來說是個(gè)黑盒,并不清楚ES這個(gè)重要組件到底是如何進(jìn)行分析的。屬于知道個(gè)大概,但一深入就很模糊的狀態(tài)。
概述
一種Analyzer?-內(nèi)置或自定義是否-僅僅是包含三個(gè)低級(jí)別構(gòu)建塊包:character filters(字符過濾器), tokenizers(分詞器)和token filters(令牌過濾器)
character filters
首先,字符過濾器接收原始文本字符的流,并且可以通過添加,移除,或改變字符變換流。例如,可以使用字符過濾器將印度語 - 阿拉伯?dāng)?shù)字(0 12345678 9)轉(zhuǎn)換為其阿拉伯語 - 拉丁語等價(jià)物(0123456789),或者<b>從流中刪除HTML元素。
其次,這個(gè)字符過濾器filter和眾多filter是可以多個(gè)進(jìn)行處理的Tokenizer
分詞器,接收字符流,并將它分為獨(dú)立的tokens (通常是單詞),如,whitespace只要看到任何空格,tokenizer就會(huì)將文本分成標(biāo)記。它會(huì)將文本 "Quick brown fox!"轉(zhuǎn)換為術(shù)語[Quick, brown, fox!]
標(biāo)記器還負(fù)責(zé)記錄每個(gè)術(shù)語的順序或位置以及該術(shù)語所代表的原始單詞的開始和結(jié)束字符偏移。Tip:分析器必須只有一個(gè) Tokenizer
Token filters
令牌濾波器接收到令牌流,并且可以添加,刪除或改變令牌。例如,lowercase令牌過濾器將所有令牌轉(zhuǎn)換為小寫, stop令牌過濾器從令牌流中刪除常用詞(停用詞)the, synonym令牌過濾器將同義詞引入令牌流。
令牌過濾器不會(huì)更改每個(gè)令牌的位置或字符偏移量。
分析器可以具有零個(gè)或多個(gè) 令牌過濾器,這些過濾器按順序應(yīng)用。
- 所以,除了ES內(nèi)置的analyzer,只要你指定這3項(xiàng)內(nèi)容,你可以定制符合業(yè)務(wù)需要的analyzer
測(cè)試 analyzer
POST _analyze
{
"tokenizer": "standard",
"filter": [ "lowercase" ],
"text": "test analyze ok"
}
結(jié)果為
"tokend":[
{
"token":"test",
"start_offset":0,
"end_offset":4,
"type":"<ALPHANUM>",
"position":0
}
...
]
可以看到,解析后,結(jié)果包含了 token,原文本起始和結(jié)束位置,解析后的相對(duì)位置