首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ElasticSearch系列-分词器

分词器

Analysis 和 Analyzer

Analysis:文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer)。Analysis是通过Analyzer来实现的。分词就是将文档通过Analyzer分成一个一个的Term(关键词查询),每一个Term都指向包含这个Term的文档。

Analyzer 组成

注意: 在ES中默认使用标准分词器: StandardAnalyzer 特点: 中文单字分词  单词分词

我是中国人 this is good man---->  analyzer----> 我  是  中  国  人   this  is  good man

分析器(analyzer)都由三种构件组成的:character filters , tokenizers , token filters。

character filter 字符过滤器

在一段文本进行分词之前,先进行预处理,比如说最常见的就是,过滤html标签(hello --> hello),& --> and(I&you --> I and you)

tokenizers 分词器

英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。

Token filters Token过滤器

将切分的单词进行加工。大小写转换(例将“Quick”转为小写),去掉停用词(例如停用词像“a”、“and”、“the”等等),加入同义词(例如同义词像“jump”和“leap”)。

注意:

三者顺序:Character Filters--->Tokenizer--->Token Filter

三者个数:Character Filters(0个或多个) + Tokenizer + Token Filters(0个或多个)

内置分词器

Standard Analyzer - 默认分词器,英文按单词词切分,并小写处理

Simple Analyzer - 按照单词切分(符号被过滤), 小写处理

Stop Analyzer - 小写处理,停用词过滤(the,a,is)

Whitespace Analyzer - 按照空格切分,不转小写

Keyword Analyzer - 不分词,直接将输入当作输出

内置分词器测试

标准分词器

特点: 按照单词分词 英文统一转为小写 过滤标点符号  中文单字分词

POST /_analyze

{

"analyzer": "standard",

"text": "this is a , good Man 中华人民共和国"

}

Simple 分词器

特点: 英文按照单词分词 英文统一转为小写 去掉符号 中文按照空格进行分词

POST /_analyze

{

"analyzer": "simple",

"text": "this is a , good Man 中华人民共和国"

}

Whitespace 分词器

特点:  中文 英文 按照空格分词 英文不会转为小写  不去掉标点符号

POST /_analyze

{

"analyzer": "whitespace",

"text": "this is a , good Man"

}

创建索引设置分词

PUT /索引名

{

"settings": {},

"mappings": {

"properties": {

"title":{

"type": "text",

"analyzer": "standard" //显示指定分词器

}

}

}

}

中文分词器

在ES中支持中文分词器非常多 如 smartCNIK 等,推荐的就是 IK分词器。

安装IK

开源分词器 Ik 的github:https://github.com/medcl/elasticsearch-analysis-ik

注意 IK分词器的版本要你安装ES的版本一致

注意 Docker 容器运行 ES 安装插件目录为 /usr/share/elasticsearch/plugins

# 1. 下载对应版本

- [es@linux ~]$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip

# 2. 解压

- [es@linux ~]$ unzip elasticsearch-analysis-ik-6.2.4.zip #先使用yum install -y unzip

# 3. 移动到es安装目录的plugins目录中

- [es@linux ~]$ ls elasticsearch-6.2.4/plugins/

[es@linux ~]$ mv elasticsearch elasticsearch-6.2.4/plugins/

[es@linux ~]$ ls elasticsearch-6.2.4/plugins/

elasticsearch

[es@linux ~]$ ls elasticsearch-6.2.4/plugins/elasticsearch/

commons-codec-1.9.jar config httpclient-4.5.2.jar plugin-descriptor.properties

commons-logging-1.2.jar elasticsearch-analysis-ik-6.2.4.jar httpcore-4.4.4.jar

# 4. 重启es生效

# 5. 本地安装ik配置目录为

- es安装目录中/plugins/analysis-ik/config/IKAnalyzer.cfg.xml

IK使用

IK有两种颗粒度的拆分:

ik_smart: 会做最粗粒度的拆分

ik_max_word: 会将文本做最细粒度的拆分

POST /_analyze

{

"analyzer": "ik_smart",

"text": "中华人民共和国国歌"

}

POST /_analyze

{

"analyzer": "ik_max_word",

"text": "中华人民"

}

扩展词、停用词配置

IK支持自定义扩展词典和停用词典

**扩展词典**就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。

**停用词典**就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。

定义扩展词典和停用词典可以修改IK分词器中config目录中IKAnalyzer.cfg.xml这个文件。

1. 修改vim IKAnalyzer.cfg.xml

IK Analyzer 扩展配置

ext_dict.dic

ext_stopword.dic

2. 在ik分词器目录下config目录中创建ext_dict.dic文件 编码一定要为UTF-8才能生效

vim ext_dict.dic 加入扩展词即可

3. 在ik分词器目录下config目录中创建ext_stopword.dic文件

vim ext_stopword.dic 加入停用词即可

4.重启es生效

注意: 词典的编码必须为UTF-8,否则无法生效!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OFi5l-0WhLELun6VD9rJ9vLA0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券