簡介
Analysis在創(chuàng)建索引或搜索時指定骆膝,將文本解析成倒排索引
,以供搜索啦撮。
簡單解釋下倒排索引:通常書本的目錄就是正排索引
,根據(jù)目錄找章節(jié)汪厨;而倒排索引
就是根據(jù)內(nèi)容(例如一個單詞)找所在的章節(jié)赃春。
Analyzer
analyzer
,內(nèi)置或自定義劫乱,是一個包含三個構(gòu)建塊(依次為character filters
织中,tokenizers
,token filters
)的包衷戈。
例如:一個內(nèi)置的english
analyzer在轉(zhuǎn)換句子The QUICK brown foxes jumped over the lazy dog!
時:
- 轉(zhuǎn)為小寫狭吼。
- 刪除對搜索無意義的詞元:the(停止詞,
stopwords
)殖妇。 - 歸納詞干刁笙,例如:foxes → fox,jumped → jump谦趣,lazy → lazi疲吸。
- 最后添加這些條件到倒排索引中:[quick, brown, fox, jump, over, lazi, dog]。
- 當(dāng)查詢時前鹅,可以查詢
"a query fox"
摘悴,雖然該字符串不在原文本中,但當(dāng)使用了同樣的analyzer
時舰绘,該句子中的單詞與倒排索引中的詞元可以匹配上蹂喻。
Character filters
- 接收字符流,通過添加捂寿、刪除口四、修改字符來轉(zhuǎn)換字符流。
- 例如從流中去掉
<b>
這樣的HTML元素秦陋。 - 可以有0或多個窃祝,按照設(shè)置的順序調(diào)用。
Tokenizer
- 接收一個字符流,分解為詞元粪小,然后輸出詞元流大磺。
- 例如,
whitespace
tokenizer就會把所有的空白符去掉探膊,"Quick brown fox!"
就會被分解成詞元:[Quick, brown, fox!]
杠愧。 - 同時Tokenizer負(fù)責(zé)記錄每個詞元的順序或位置,以及原單詞的起始結(jié)束字符偏移量逞壁。
- 必須而且只能有一個Tokenizer流济。
Token filters
- 接收詞元流,可以添加腌闯、刪除绳瘟、修改詞元。
- 例如:
lowercase
token filter將所有的詞元轉(zhuǎn)為小寫姿骏,stop
token filter刪除掉停止詞糖声,synonym
toekn filter將引入同義詞到詞元流中。 - Token filter不可以改變每個詞元的位置或字符偏移量分瘦。
- 可以有0或多個蘸泻,按照設(shè)置的順序調(diào)用。
測試analyzers
可以在請求體中指定analyzer(或者tokenizer嘲玫、token filter悦施、Character Filter),
GET _analyze
{
"analyzer": "whitespace",
"text": "The quick brown fox."
}
GET _analyze
{
"analyzer": "english",
"text": "The QUICK brown foxes jumped over the lazy dog!"
}
GET _analyze
{
"tokenizer": "whitespace",
"filter": ["lowercase","stop"],
"text": "The QUICK brown foxes jumped over the lazy dog!"
}
從上面第二個的返回結(jié)果中可以看到位置和起始結(jié)束字符偏移量
{
"tokens" : [
{
"token" : "quick",
"start_offset" : 4,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "brown",
"start_offset" : 10,
"end_offset" : 15,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "fox",
"start_offset" : 16,
"end_offset" : 21,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "jump",
"start_offset" : 22,
"end_offset" : 28,
"type" : "<ALPHANUM>",
"position" : 4
},
{
"token" : "over",
"start_offset" : 29,
"end_offset" : 33,
"type" : "<ALPHANUM>",
"position" : 5
},
{
"token" : "lazi",
"start_offset" : 38,
"end_offset" : 42,
"type" : "<ALPHANUM>",
"position" : 7
},
{
"token" : "dog",
"start_offset" : 43,
"end_offset" : 46,
"type" : "<ALPHANUM>",
"position" : 8
}
]
}