ES分词解析

1 篇文章 0 订阅


## 什么是分词

```
把文本转换为一个个的单词,分词称之为analysis。es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体。
```

## es内置分词器

```
- standard:默认分词,单词会被拆分,大小会转换为小写。
- simple:按照非字母分词。大写转为小写。
- whitespace:按照空格分词。忽略大小写。
- stop:去除无意义单词,比如the/a/an/is…
- keyword:不做分词。把整个文本作为一个单独的关键词
```

## 分词可用方案
```
分词器                          优势                                            劣势
Smart Chinese Analysis        官方插件                                   中文分词效果惨不忍睹
IKAnalyzer                    简单易用,支持自定义词典和远程词典       词库需要自行维护,不支持词性识别
结巴分词                       新词识别功能                                  不支持词性识别
Ansj中文分词                   分词精准度不错,支持词性识别              对标hanlp词库略少,学习成本高
Hanlp                          目前词库最完善,支持的特性非常多             需要更优的分词效果,学习成本高

```

## IK中文分词器

```
- ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;
- ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。
```
## IK词库拓展
### 静态拓展
```
方法:在ik config目录下添加xxx.dic,然后在IKAnalyzer.cfg.xml配置拓展路径
优点:可以加载大量数据
缺点:不能立即生效,需要重启es
```
### 动态拓展
```
方法:先在一个服务内提供一个xxx.dic静态文件,然后在IKAnalyzer.cfg.xml配置动态拓展路径
优点:热部署,立即生效
缺点:重复请求可能会带来性能问题
原理:IK内部定义了一个监控线程,每隔一分钟发出请求,获取Last-Modify和ETags(由IK内部自己定义管理),检测是否有变化,没变化休眠一分钟,有变化则更新词库
注意: 默认情况下, 最多一分钟之内就可以识别到新增的词语。
```

### 扩展停止词库
```
方法跟上面的一致,扩展停止词中的词会被过滤掉

```
## 拼音分词
```
- pinyin: 按照中文拼音分词。
```
## 中文拼音结合自定义分词
```
首先要先手动创建索引,添加自定义分词类型
```
```
# 自定义分词类型
put /es-article
{
    "settings": {
        "analysis": {
            "analyzer": {
                "ik_smart_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_smart",
                    "filter": ["my_pinyin", "word_delimiter"]
                },
                "ik_max_word_pinyin": {
                    "type": "custom",
                    "tokenizer": "ik_max_word",
                    "filter": ["my_pinyin", "word_delimiter"]
                }
            },
            "filter": {
                "my_pinyin": {
                    "type" : "pinyin",
                    "keep_first_letter":true,
                    "keep_separate_first_letter" : true,
                    "keep_full_pinyin" : true,  
                    "keep_original" : true, 
                    "limit_first_letter_length" : 16, 
                    "lowercase" : true,  
                    "remove_duplicated_term" : true 
                } } } } }
                
```

```
然后再手动设置_mapping关系
elasticsearchTemplate.putMapping(Article.class);
```
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值