Elasticsearch
搜索中比较重要的就是分词了,通过分词将内容拆分成不同的关键词,然后通过关键词的匹配度来打分排序选择结果,Elasticsearch
默认是支持分词的,但是对中文的分词就可想而知了,所以中文分词需要自行安装差件,推荐IK
分词插件。
内置分词
分词器 | 名称 | 说明 |
---|---|---|
Standard Analyzer | 标准分词器 | 适用于英语等 |
Simple Analyzer | 简单分词器 | 于非字母字符进行分词,单词会被转为小写字母 |
Whitespace Analyzer | 空格分词器 | 按照空格进行切分 |
Stop Analyzer | 简单分词器 停用词 | 类似于简单分词器,但是增加了停用词的功能 |
Keyword Analyzer | 关键词分词器 | 输入文本等于输出文本,不会切分 |
Pattern Analyzer | 正则分词器 | 利用正则表达式对文本进行切分,支持停用词 |
Language Analyzer | 语言分词器 | 针对特定语言的分词器 |
Fingerprint Analyzer | 指纹分词器 | 指纹分析仪分词器,通过创建标记进行重复检测 |
中文分词
安装
- 下载
- 解压安装到
你的es目录/plugins
文件夹下 - 改名为
ik
- 扩展词典和自定义词典需修改配置文件
ik/config/IKAnalyzer.cfg.xml
- 重启
elasticsearcch
服务
使用
IK
提供了两个分词算法:
ik_smart
为最少切分
GET _analyze
{
"analyzer":"ik_smart",
"text":"中国农业银行"
}
结果为
代码语言:javascript复制{
"tokens" : [
{
"token" : "中国农业银行",
"start_offset" : 0,
"end_offset" : 6,
"type" : "CN_WORD",
"position" : 0
}
]
}
ik_max_word
为最细粒度划分
GET _analyze
{
"analyzer":"ik_max_word",
"text":"农业银行"
}
结果为
代码语言:javascript复制{
"tokens" : [
{
"token" : "农业银行",
"start_offset" : 0,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 0
},
{
"token" : "农业",
"start_offset" : 0,
"end_offset" : 2,
"type" : "CN_WORD",
"position" : 1
},
{
"token" : "银行",
"start_offset" : 2,
"end_offset" : 4,
"type" : "CN_WORD",
"position" : 2
}
]
}