es 不管是索引操作还是查询操作,都会经过分析器(analyzer),解析器主要做过滤(filter)和分词(tokenizer)操作。
分析器内部执行顺序
elasticsearch 的 analyzer 一般由三部分组成,分别是 character filters、tokenizers、token filters。它的执行顺序如下:
character filters -> tokenizers -> token filters
character filters 主要是字符过滤器,如 html 标签过滤器 html_strip。
tokenizers 其实就是分词器,分词后的每个 term 叫 token,其中典型的第三方的中文分词器 ik_smart 等等。
token filters 是将第二步 tokenizers 的结果即每个 token 进行相应的变换,比如在这个阶段进行停用词(stop)过滤、小写化(lowercase)、同义词(synonmy)转换等等。
示例
{
"index": {
"analysis": {
"filter": {
"synonym": {
"type": "synonym",
"synonyms_path": "analysis/synonyms.txt"
}
},
"analyzer": {
"ik_smart_synonym": {
"filter": [
"synonym",
"standard",
"lowercase",
"stop"
],
"tokenizer": "ik_smart"
}
}
}
}
}