分析器:
分析器作用是将指定字符串处理成多个单个的词条,创建倒排索引。当索引数据时,分析器会将对应的数据处理分词后,创建倒排索引,当搜索时,将待搜索的字符串处理成词条,再去倒排索引中搜索对应的文档。
分析器包含如下三个:
字符过滤器
首先,字符串按顺序通过每个 字符过滤器 。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将 & 转化成 `and`。
分词器
其次,字符串被 分词器 分为单个的词条。一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条。
Token 过滤器
最后,词条按顺序通过每个 token 过滤器 。这个过程可能会改变词条(例如,小写化 Quick ),删除词条(例如, 像 a`, `and`, `the 等无用词),或者增加词条(例如,像 jump 和 leap 这种同义词)
测试分析器:
GET /_analyze
{
"analyzer": "standard", # 分析器
"text": "Text to analyze" # 待分析的词
}
通过设置_mapping中的properties, 可以设置对应全文域字段的分析器
{
"tweet": {
"type": "text",
"analyzer": "english"
}
}
如上就是设置tweet字段的分析器为english
中文分词
当我们处理的是中文时,需要设置中文分词器。
使用ik分词,需要安装elasticsearch-analysis-ik elasticsearch-analysis-ik的github地址: https://github.com/medcl/elasticsearch-analysis-ik
当时es版本为5.6.3, 通过文档得知,可以直接在elasticsearch安装目录下执行:
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.3/elasticsearch-analysis-ik-5.6.3.zip
安装成功后,就可以使用中文分词器
我们在设置_mapping时,可以指定字段的analyzer为ik_smart 或ik_max_word
{
"tweet": {
"type": "text",
"analyzer": "ik_smart"
}
}
也可以通过_analyze进行测试分词结果