ElasticSearch分词介绍!
ElasticSearch分词介绍!
月伴飞鱼分词是指将文本转换成一系列单词的过程,也叫做文本分析。
举一个分词简单的例子:
比如你输入
Mastering Elasticsearch
,会自动帮你分成两个单词:
- 一个是
mastering
- 另一个是
elasticsearch
- 可以看出单词也被转化成了小写的
索引和搜索分词
文本分词会发生在两个地方:
- 创建索引:
- 当索引文档字符类型为
text
时,在建立索引时将会对该字段进行分词。- 搜索:
- 当对一个
text
类型的字段进行全文检索时,会对用户输入的文本进行分词。
分词器测试
可以通过
_analyzer
API来测试分词的效果。
1 | COPY# 过滤html 标签 |
指定分词器
创建索引时指定分词器:
如果设置手动设置了分词器,ES将按照下面顺序来确定使用哪个分词器:
- 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置。
- 如果设置了
analysis.analyzer.default
,则使用该设置的分词器。- 如果上面两个都未设置,则使用默认的
standard
分词器。
字段指定分词器:
为
title
属性指定分词器:
1 | COPYPUT my_index |
设置默认分词器:
1 | COPYPUT my_index |
搜索时如何确定分词器:
在搜索时,通过下面参数依次检查搜索时使用的分词器:
- 搜索时指定
analyzer
参数。- 创建
mapping
时指定字段的search_analyzer
属性。- 创建索引时指定
setting
的analysis.analyzer.default_search。
- 查看创建索引时字段指定的
analyzer
属性。- 如果上面几种都未设置,则使用默认的
standard
分词器。
指定analyzer
:
搜索时指定
analyzer
查询参数。
1 | COPYGET my_index/_search |
指定字段analyzer
:
1 | COPYPUT my_index |
指定默认default_seach
:
1 | COPYPUT my_index |
内置分词器
分词器 | 说明 |
---|---|
Standard Analyzer | 默认分词器,按词切分,小写处理,停用词处理默认关闭 |
Simple Analyzer | 按照非字母切分,非字母的都被去除,小写处理 |
Stop Analyzer | 小写处理,停用词过滤 |
Whitespace Analyzer | 按照空格切分,不转小写 |
Keyword Analyzer | 不分词,直接将输入内容进行输出 |
Pattern Analyzer | 正则表达式,默认\W+ (非字母符号分割) |
Language | 提供30多种常见语言的分词器 |
Customer Analyzer | 自定义分词器 |
分析器 | 描述 | 分词对象 | 结果 |
---|---|---|---|
standard | 标准分析器是默认的分析器,如果没有指定,则使用该分析器。 它提供了基于文法的标记化(基于 Unicode 文本分割算法,如 Unicode 标准附件 # 29所规定) ,并且对大多数语言都有效。 |
The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog’s, bone ] |
simple | 简单分析器将文本分解为任何非字母字符的标记,如数字、空格、连字符和撇号、放弃非字母字符,并将大写字母更改为小写字母。 | The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ] |
whitespace | 空格分析器在遇到空白字符时将文本分解为术语 | The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog’s, bone. ] |
stop | 停止分析器与简单分析器相同,但增加了删除停止字的支持。默认使用的是 _english_ 停止词。 |
The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ] |
keyword | 不分词,把整个字段当做一个整体返回 | The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.] |
pattern | 模式分析器使用正则表达式将文本拆分为术语。正则表达式应该匹配令牌分隔符,而不是令牌本身。正则表达式默认为 w+ (或所有非单词字符)。 |
The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone. |
[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ] |
多种西语系 arabic, armenian, basque, bengali, brazilian, bulgarian, catalan, cjk, czech, danish, dutch, english等等 | 一组旨在分析特定语言文本的分析程序。 |
中文分词
中文分词器最简单的是
ik
分词器,还有jieba
分词,哈工大分词器等。
分词器 | 描述 | 分词对象 | 结果 |
---|---|---|---|
ik_smart |
ik分词器中的简单分词器,支持自定义字典,远程字典 | 学如逆水行舟,不进则退 | [学如逆水行舟,不进则退] |
ik_max_word |
ik_分词器的全量分词器,支持自定义字典,远程字典 | 学如逆水行舟,不进则退 | [学如逆水行舟,学如逆水,逆水行舟,逆水,行舟,不进则退,不进,则,退] |