分析文本分析是将全文转换为一系列单词(term/token)的过程,也称为分词
,分析是通过Analyzer实现的。 Elasticsearch 有多种内置分析器。如果不能满足您的需求,您可以根据自己的需求定制分析仪。除了在写入数据时转换term之外,在匹配Query语句时还需要使用同一个分析器来分析查询语句。
二、Analyzer 的组成字符过滤器(例如,对于原始文本处理,您可以使用字符过滤器将印度阿拉伯数字( ) 转换为阿拉伯-拉丁数字(0123456789)) Tokenizer(根据规则分割成单词),将转换文本"Quick Brown Fox!"转化为术语[Quick, Brown, Fox!],分词器还记录文本单词的位置和偏移量。词元过滤器(处理分段单词,将其小写,删除停用词,并添加同义词) image三、Analyzer 内置的分词器示例: 2 只快速的棕狐跳过了懒狗的骨头。
Standard Analyzer默认分词器根据单词分类处理小写#standard
获取分析
{
"分析仪": "标准",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[那个,2,快速,棕色,狐狸,a,跳过,懒惰的,狗的骨头]
Simple Analyzer按照非字母进行分段,非字母会被小写去掉#simpe
获取分析
{
"分析器": "简单",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[快速的棕色狐狸跳过了懒狗的骨头]
Stop Analyzer小写处理停用词过滤(the,a,is)GET _analyze
{
"分析器": "停止",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[快速、棕色、狐狸、跳跃、越过、懒惰、狗、骨头]
Whitespace Analyzer按空格分割#stop
获取分析
{
"分析器": "空白",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[2只快速的棕色狐狸跳过了懒惰的狗骨头。]
Keyword Analyzer不分词,将其视为整个术语并输出#keyword
获取分析
{
"分析器": "关键字",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[两只敏捷的棕狐跳过了懒狗的骨头。]
Patter Analyzer通过正则表达式默认分词为W+(非字母分隔) GET _analyze
{
"分析器": "模式",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[the,2,quick,brown,foxes,jumped,over,the,lazy,dog,s,bone]
Language Analyzer支持的语言:阿拉伯语、亚美尼亚语、巴斯克语、孟加拉语、保加利亚语、加泰罗尼亚语、捷克语、荷兰语、英语、芬兰语、法语、加利西亚语、德语、印地语、匈牙利语、印度尼西亚语、爱尔兰语、意大利语、拉脱维亚语、立陶宛语、挪威语、葡萄牙语、罗马尼亚语、俄语、索拉尼语、西班牙语、瑞典语、土耳其语。
英语
获取分析
{
"分析器": "英语",
"text": "两只快速的棕狐跳过了懒狗的骨头。"
} 输出:
[2,快速,棕色,狐狸,跳跃,越过,懒惰,狗,骨头]
中文分词比英文分词更难。英语单词之间用空格分隔。中文理解通常需要结合上下文才能有正确的理解,比如【苹果,不太好吃】和
【苹果,不大,好吃】,这两句话含义不同。
ICU AnalyzerElasticSearch默认按每个字符分隔中文对,这不能满足我们的需求。 ICU分析器采用国际组件Unicode(ICU)函数库,提供丰富的Unicode处理,更好地支持中文分词。 ICU 分析器不是默认的分词器。您需要先安装插件。安装命令为sudo bin/elasticsearch-plugin installanalysis-icu。
POST_分析
{
"分析器": "icu_analyzer",
"text": "他说的确实有道理""
} 输出:
【他说的确实是真的】
POST_分析
{
"分析仪": "标准",
"text": "他说的确实有道理""
} 输出:
【他说的确实有道理】
ICU只是中文分词器之一。您可以在Github 上找到其他中文分词器,例如IK 和THULAC。这些这里就不提了。如果你有兴趣,可以自己去了解一下。
四、总结本文详细讲解了Analyzer、ES内置分词是如何工作的、以及ICUAnalyzer对中文分词的效果。下面总结了所有内置分词器的特点并做了简单的比较。
标准分析器——默认分词器,按单词切分,小写处理
简单分析器——按非字母分段(符号被过滤),小写处理
Stop Analyzer——小写处理、停用词过滤(the、a、is)
Whitespace Analyzer -- 根据空格分割,不转换为小写
关键词分析器——不分词,直接把输入当输出
模式分析器——正则表达式,默认W+(非字符分隔)
语言分析器——提供30 多种常见语言的分词器
【Elasticsearch 7:深入解析Analyzer机制(第四部分)】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于看到这个系列文章了,我一直想学习 Elasticsearch 的分析器功能!
有14位网友表示赞同!
这篇文章讲的是什么类型的分析方法呢?我记得之前有中文分词的,是吗?
有9位网友表示赞同!
Elasticsearch 分析器的设置还挺重要的吧,不然检索结果会不会很乱啊?
有7位网友表示赞同!
感觉这个 "探索之路" 太棒了!系统性地讲解elasticsearch,太适合小白入门了
有12位网友表示赞同!
我需要更深入了解不同的分析器类型和它们的适用场景,这篇文章能帮我吗?
有13位网友表示赞同!
我已经试过一些简单的分析器了,但还是觉得这方面的知识点很多啊,希望多学习!
有18位网友表示赞同!
以前分词都是手工写的,现在用 Elasticsearch 分析器可方便多了!
有10位网友表示赞同!
Elasticsearch 的分析器功能好像很强大,可以实现哪些个性化的处理?
有8位网友表示赞同!
看了标题就知道是关于分析器的文章,我对英文文本的分析比较感兴趣,不知道这篇文章会不会涉及到?
有9位网友表示赞同!
我最近在项目中用到 Elasticsearch ,正好学习一下这个系列文章能帮我好多!
有11位网友表示赞同!
Elasticsearch 的分析器配置起来有点复杂吗?有没有一些简单易用的推荐?
有8位网友表示赞同!
我一直想把我的文档数据导入 Elasticsearch ,希望这篇文章能告诉我如何更好的进行分析
有9位网友表示赞同!
对不同领域的数据进行分析,需要的分析器是否会不一样呢?
有6位网友表示赞同!
学习 Elasticseearch 的过程中,总是遇到各种各样的坑,希望能在这篇文章里得到一些解决方案!
有16位网友表示赞同!
Elasticsearch 的分析器的文档是不是很详细啊?不知道里面有没有什么例子可以参考?
有14位网友表示赞同!
希望这篇文章能介绍到一些实用的案例,让我更深刻地理解Elasticsearch 分析器的应用!
有12位网友表示赞同!
我比较好奇 Elasticsearch 7 中对分析器的有哪些新的改进?
有15位网友表示赞同!
在使用 Elasticsearch 时,如何选择合适的分析器非常重要。 这篇文章会提供哪些挑选方式?
有14位网友表示赞同!
如果想优化 Elasticsearch 的检索效果,应该从分析器入手吗?需要修改什么?
有16位网友表示赞同!