Elasticsearch分词器
所属分类 elasticsearch
浏览量 1115
Analysis
文本分析 分词 把文本转换成一系列单词(term/token)
Analysis通过Analyzer来实现
倒排索引
analyzer 三大组件
character filters , tokenizers , token filters
1) character filter 字符过滤器
文本预处理,譬如过滤html标签
2) tokenizers 分词器
英文分词可以根据空格将单词分开,中文分词比较复杂
3) Token filters Token过滤器
将切分的单词进行加工 ,大小写转换 ,去掉词(例如停用词等),或者增加词(例如同义词)
三者顺序
Character Filters--->Tokenizer--->Token Filter
三者个数
analyzer = CharFilters(0个或多个) + Tokenizer(恰好一个) + TokenFilters(0个或多个)
Elasticsearch内置分词器
Standard Analyzer 默认分词器,按词切分,小写处理
Simple Analyzer 按照非字母切分(符号被过滤), 小写处理
Stop Analyzer 小写处理,停用词过滤(the,a,is)
Whitespace Analyzer 按照空格切分,不转小写
Keyword Analyzer 不分词,直接将输入当作输出
Patter Analyzer 正则表达式,默认\W+(非字符分割)
Customer Analyzer 自定义分词器
POST _analyze
{"analyzer": "standard","text":"hello,es"}
max_token_length : 最大token长度,默认255
stopwords : 预定义的停止词列表,如_english_或 包含停止词列表的数组,默认是 _none_
stopwords_path : 包含停止词的文件路径
PUT myindex
{
"settings": {
"analysis": {
"analyzer": {
"my_english_analyzer": {
"type": "standard", #设置分词器为standard
"max_token_length": 5, #设置分词最大为5
"stopwords": "_english_" #设置过滤词
}
}
}
}
}
中文分词器 IK
https://github.com/medcl/elasticsearch-analysis-ik
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/xxx/elasticsearch-analysis-ik-xxx.zip
安装完插件后重启ES才能生效
离线安装
cp elasticsearch-analysis-ik-5.6.8.zip $ESHOME/plugins
unzip elasticsearch-analysis-ik-5.6.8.zip
mv elasticsearch ik
rm elasticsearch-analysis-ik-5.6.8.zip
启动日志
loaded plugin [analysis-ik]
单机部署
network.host: 0.0.0.0
否则无法远程连接
两种粒度的拆分方法
ik_smart 最粗粒度的拆分
ik_max_word 最细粒度的拆分
POST /_analyze
{
"text":"中华人民共和国国歌",
"analyzer":"ik_smart"
}
{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "国歌",
"start_offset": 7,
"end_offset": 9,
"type": "CN_WORD",
"position": 1
}
]
}
POST /_analyze
{
"text":"中华人民共和国国歌",
"analyzer":"ik_max_word"
}
{
"tokens": [
{
"token": "中华人民共和国",
"start_offset": 0,
"end_offset": 7,
"type": "CN_WORD",
"position": 0
},
{
"token": "中华人民",
"start_offset": 0,
"end_offset": 4,
"type": "CN_WORD",
"position": 1
},
{
"token": "中华",
"start_offset": 0,
"end_offset": 2,
"type": "CN_WORD",
"position": 2
},
{
"token": "华人",
"start_offset": 1,
"end_offset": 3,
"type": "CN_WORD",
"position": 3
},
{
"token": "人民共和国",
"start_offset": 2,
"end_offset": 7,
"type": "CN_WORD",
"position": 4
},
{
"token": "人民",
"start_offset": 2,
"end_offset": 4,
"type": "CN_WORD",
"position": 5
},
{
"token": "共和国",
"start_offset": 4,
"end_offset": 7,
"type": "CN_WORD",
"position": 6
},
{
"token": "共和",
"start_offset": 4,
"end_offset": 6,
"type": "CN_WORD",
"position": 7
},
{
"token": "国",
"start_offset": 6,
"end_offset": 7,
"type": "CN_CHAR",
"position": 8
},
{
"token": "国歌",
"start_offset": 7,
"end_offset": 9,
"type": "CN_WORD",
"position": 9
}
]
}
get请求也可以
http://localhost:9200/_analyze?analyzer=ik_smart&text=hello elasticsearch
上一篇
下一篇
elasticsearch集群搭建
Elasticsearch analyzer 和 search_analyzer
Elasticsearch5快速入门
ElasticSearch 状态查询Cat接口
Elasticsearch _all字段
elasticsearch mappings dynamic属性