es的分析器往往包括3個低級構(gòu)建塊包:
- character filters - 字符過濾器,可以添加惨好、刪除或更改字符來轉(zhuǎn)換流,一個分析器可有多個字符過濾器;
- tokenizer - 標記器仰剿,接受字符流,將其分解成單獨的標記痴晦,并輸出標記流南吮,一個分析器只能有一個標記器;
- token filters - token過濾器誊酌,接受token流部凑,并可以添加、刪除或修改token碧浊,不允許更改每個token的位置或字符偏移量涂邀,一個分析器可有多個token過濾器,并按順序應用箱锐。
測試分析器
指定索引引用分析器
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"ik": { //自定義一個名為std_folded的分析器
"type": "custom", //type自定義
"tokenizer": "ik_smart", //指定標記器
"filter": [ //指定字符過濾器
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings": { //設置映射
"my_type": {
"properties": {
"my_text": { //指定字段
"type": "text", //設置type比勉,String類型已被廢棄,用text或keyword
"analyzer": "ik" //指定分析器為上文定義的自定義分析器
}
}
}
}
}
測試分析器效果
GET my_index/_analyze
{
"analyzer": "std_folded", //按分析器名指定分析器
"text": "這里有最及時的動漫新番,最棒的ACG氛圍,最有創(chuàng)意的Up主" //指定要分析的文本
}
測試字段指定的分析器效果
GET my_index/_analyze
{
"field": "my_text", //參考字段my_text使用的分析器
"text": "這里有最及時的動漫新番,最棒的ACG氛圍,最有創(chuàng)意的Up主"
}
Elasticsearch提供的內(nèi)置analyzers
Standard Analyzer
標準分析儀按照Unicode文本分段算法的定義驹止,將文本分割成單詞邊界的分詞浩聋。它刪除了大多數(shù)標點符號,小寫顯示分詞臊恋,并支持刪除stop words衣洁。
Simple Analyzer
當遇到不是字母的字符時,簡單的分析器會將文本分成條目抖仅。小寫顯示分詞坊夫。
Whitespace Analyzer
空格分析器遇到任何空格字符時都會將文本分為多個項目毙替。不會把分詞轉(zhuǎn)換為小寫字母。
Stop Analyzer
停止分析儀和Simple Analyzer類似践樱,但也支持stop words的刪除厂画。
Keyword Analyzer
一個“noop”分析器,它可以接受任何給定的文本拷邢,并輸出完全相同的文本作為一個單詞袱院。
Pattern Analyzer
使用正則表達式拆分分詞,支持lower-casing和stop words瞭稼。
Language Analyzers
Elasticsearch提供許多語言特定的分析器寿谴,如英語或法語裁良。
Fingerprint Analyzer
一個專門的分析儀分唾,它可以創(chuàng)建一個可用于重復檢測的指紋揭璃。