ElasticSearch使用Analyzer进行分词
Analysis 与 Analyzer
-
Analysis:
- 文本分析是把全文本转换成一系列单词(term / token) 的过程,也叫分词
- Analysis 是通过Analyzer来实现的
- 可使用ElasticSearch内置的分词器
- 也可按需定制化分词器
- 除了在数据写入时转换词条,匹配Query语句的时候也需要用相同的分词器对查询语句进行分词
如:
Elasticsearch Server
会被分成Elasticsearch
和Server
-
Analyzer :
- 分词器是专门处理分词的组件,Analyzer 由三部分组成
- Character Filters (针对原始文本处理,例如去除html标签)
- Tokenizer (按照规则切分成单词)
- Token Filter (将切分的单词进行加工,小写/ 删除 stopwords /增加同义词等)
比如:
文档:
Mastering Elasticsearch & Elastersearch in Action
分词后:
master
,elastersearch
,action
- 分词器是专门处理分词的组件,Analyzer 由三部分组成
使用 _analyze API
Standard Analyzer
Standard Analyzer 是ES默认的分词器:
- 按词切分
- 小写处理
- stop words 默认关闭
// 使用_analyze测试
GET /_analyze
{
"analyzer": "standard",
"text":"Mastering Elasticsearch,elasticsearch in Action"
}
分词结果:
{
"tokens" : [
{
"token" : "mastering",
"start_offset" : 0,
"end_offset" : 9,
"type" : "<ALPHANUM>",
"position" : 0
},
{
"token" : "elasticsearch",
"start_offset" : 10,
"end_offset" : 23,
"type" : "<ALPHANUM>",
"position" : 1
},
{
"token" : "elasticsearch",
"start_offset" : 24,
"end_offset" : 37,
"type" : "<ALPHANUM>",
"position" : 2
},
{
"token" : "in",
"start_offset" : 38,
"end_offset" : 40,
"type" : "<ALPHANUM>",
"position" : 3
},
{
"token" : "action",
"start_offset" : 41,
"end_offset" : 47,
"type" : "<ALPHANUM>",
"position" : 4
}
]
}
安装分词器
我的ElasticSearch是用docker部署的,下面说下安装analysis-icu 分词器的方法
docker exec -it elasticsearch7.6.0(你的服务名) /bin/bash
cd bin
elasticsearch-plugin install analysis-icu
然后重启服务即可