elasticsearch 分词器(Elasticsearch Analyzer详解)

:暂无数据 2026-07-05 12:40:01 :1

elasticsearch 分词器(Elasticsearch Analyzer详解)

大家好,今天小编来为大家解答以下的问题,关于elasticsearch 分词器,Elasticsearch Analyzer详解这个很多人还不知道,现在让我们一起来看看吧!

本文目录

Elasticsearch Analyzer详解

Elasticsearch 中文本分析Analysis是把全文本转换成一系列的单词(term/token)的过程,也叫分词。文本分析是使用分析器 Analyzer 来实现的,Elasticsearch内置了分析器,用户也可以按照自己的需求自定义分析器。
为了提高搜索准确性,除了在数据写入时转换词条,匹配 Query 语句时候也需要用相同的分析器对查询语句进行分析。

Analyzer 的组成
Analyzer 由三部分组成:Character Filters、Tokenizer、Token Filters

Character Filters

Character Filters字符过滤器接收原始文本text的字符流,可以对原始文本增加、删除字段或者对字符做转换。 一个Analyzer 分析器可以有 0-n 个按顺序执行的字符过滤器。

Tokenizer
Tokenizer 分词器接收Character Filters输出的字符流,将字符流分解成的那个的单词,并且输出单词流。例如空格分词器会将文本按照空格分解,将 "Quick brown fox!" 转换成 。分词器也负责记录每个单词的顺序和该单词在原始文本中的起始和结束偏移 offsets 。
一个Analyzer 分析器有且只有 1个分词器。

Token Filters
Token Filter单词过滤器接收分词器 Tokenizer 输出的单词流,可以对单词流中的单词做添加、移除或者转换操作,例如 lowercase token filter会将单词全部转换成小写,stop token filter会移除 the、and 这种通用单词,synonym token filter会往单词流中添加单词的同义词。
Token filters不允许改变单词在原文档的位置以及起始、结束偏移量。
一个Analyzer 分析器可以有 0-n 个按顺序执行的单词过滤器。

Elasticsearch内置的分词器
Standard Analyzer - 默认分词器,按词切分,小写处理
Simple Analyzer - 按照非字母切分(符号被过滤),小写处理
Stop Analyzer - 小写处理,停用词过滤(the ,a,is)
Whitespace Analyzer - 按照空格切分,不转小写
Keyword Analyzer - 不分词,直接将输入当做输出
Patter Analyzer - 正则表达式,默认 \W+
Language - 提供了 30 多种常见语言的分词器

常用的插件分词器
IK Analyzer - 对中文分词友好,支持远程词典热更新,有ik_smart 、ik_max_word 两种分析器
pinyin Analyzer - 可以对中文进行拼音分析,搜索时使用拼音即可搜索出来对应中文
ICU Analyzer - 提供了 Unicode 的支持,更好的支持亚洲语言
hanLP Analyzer - 基于NLP的中文分析器

ES自定义分词器

es的分词器往往包括3个低级构建块包:

Standard Analyzer
标准分析仪按照Unicode文本分段算法的定义,将文本分割成单词边界的分词。它删除了大多数标点符号,小写显示分词,并支持删除stop words。

Simple Analyzer
当遇到不是字母的字符时,简单的分析器会将文本分成条目。小写显示分词。

Whitespace Analyzer
空格分析器遇到任何空格字符时都会将文本分为多个项目。不会把分词转换为小写字母。

Stop Analyzer
停止分析仪和Simple Analyzer类似,但也支持stop words的删除。

Keyword Analyzer
一个“noop”分析器,它可以接受任何给定的文本,并输出完全相同的文本作为一个单词。

Pattern Analyzer
使用正则表达式拆分分词,支持lower-casing和stop words。

Language Analyzers
Elasticsearch提供许多语言特定的分析器,如英语或法语。

Fingerprint Analyzer
一个专门的分析仪,它可以创建一个可用于重复检测的指纹。

***隐藏网址***

对中文文本以英文逗号作为分隔符分词:

将分析器设置到索引上

获取分词结果

***隐藏网址***

es 节点层面的默认分词设置已经废弃,不支持了。就是说在 elasticsearch.yml 配置诸如:

无效,会导致es启动失败:

推荐在索引层面动态设置。
***隐藏网址***

ElastiSearch默认分词器

在Elasticsearch中的数据可以分为两类: 精确值(exact values)以及全文(full text) 。
精确值 :例如日期类型date,若date其有两个值:2014-09-15与2014,那么这两个值不相等。又例如字符串类型foo与Foo不相等。

全文 :通常是人类语言写的文本,例如一段tweet信息、email的内容等。
精确值很容易被索引 :一个值要么相当要么不等。 索引全文值就需要很多功夫。例如我们不仅要想:这个文档符合我们的查询吗?还要想:这个文档有多符合我们的查询?换句话说就是:这个文档跟我们的查询关联大吗?我们很少精确的去匹配整个全文,我们最想要的是去匹配全文文本的内部信息。除此,我们还希望搜索能够理解我们的意图:例如
如果你搜索UK,我们需要包含United Kingdom的文本也会被匹配。 如果你搜索jump,那么包含jumped,jumps,jumping,更甚者leap的文本会被匹配。
为了更方便的进行全文索引,Elasticsearch首先要先分析文本,然后使用分析过的文本去创建倒序索引。

Elasticsearch全文检索默认分词器为standard analyzer。standard analyzer中,character Filter什么也没有做,Token Filters只是把英文大写转化为小写,因此Elasticsearch默认对大小写不敏感,下面主要介绍Tokenizer。
token分隔符把text分隔为token(term)。数据写入的时候会使用standard analyzer处理,text会被处理为token列表。搜索的text也会执行相同的处理,最后使用处理后的token和源text处理后的token匹配。

除了“a-z、A-Z、0-9、_”以外,但不包括“.;,”这三个字符,其他情况都是token分隔符。

“.”链接number和char时,作为token分隔符,其它情况不是分隔符

1)“number.number”经过standard analyzer处理后,token列表
例如“123.123s”,搜索“123”是搜索不到的,搜索“123.123s”是可以匹配的
2)“char.char”经过standard analyzer处理后,token列表
例如“test.test”,搜索“test”是搜索不到的,搜索“test.test”是可以匹配的
3)“number.char或者char.number”经过standard analyzer处理后,token列表
例如“test1.s1”,token列表为,搜索“test1”是可以匹配的

“;”链接number和number时,不作为token分隔符,其它情况都是分隔符

1)“number;number”经过standard analyzer处理后,token列表
例如“123;123”,搜索“123”是搜索不到的,搜索“123;123”是可以匹配的
2)“number;char或者char;number”经过standard analyzer处理后,token列表
例如“test1;s1”,搜索“test1”是可以匹配的
3)“char;char”经过standard analyzer处理后,token列表
例如“test1;ss1”,搜索“test1s”可以匹配的

“,”链接number和number时,不作为token分隔符,其它情况都是分隔符
1)“number,number”经过standard analyzer处理后,token列表
例如“123,123”,搜索“123”是搜索不到的,搜索“123,123”是可以匹配的
2)“number,char或者char,number”经过standard analyzer处理后,token列表
例如“test1,s1”,搜索“test1”是可以匹配的
3)“char,char”经过standard analyzer处理后,token列表
例如“test;s1”,搜索“test”是可以匹配的

在最前面和最后面都是token分隔符

1)“
例如“,.test…”,搜索“test”可以匹配
2)“
例如“,.123…”,搜索“123”可以匹配
3)“_

存储字符串:“123 test1:a_b a.b”,分词后的token为:

1)使用关键字term搜索 123、test1、a_b或a.b可以匹配
2)使用关键字term搜索“test1##a_b”也可以匹配,在这儿“#”只是起了个分隔符的作用,没有实际意义,和搜索“test1:a_b”的意义一样,搜索字符串分隔为两个token去匹配。
3)使用关键字term搜索“test1?.,“也可以匹配,相当于使用token”test1“去搜索
4)搜索“a“,就没有匹配结果,源字符串分隔后的token中没有“a”

存储字符串:“123;456 test”,分词后的term为:

1) 查询“123”是没有返回结果的
2) 查询“123:456”是没有返回结果的
3) 查询“123;456”是有结果
4) 查询“.123;456#”是有结果
***隐藏网址***

除了汉字外的所有字符都是分隔符,每个字都会作为一个term。因此在搜索中,存在除了汉字以为的字符都不起任何作用,不会作为匹配字符.

OK,关于elasticsearch 分词器和Elasticsearch Analyzer详解的内容到此结束了,希望对大家有所帮助。

elasticsearch 分词器(Elasticsearch Analyzer详解)

本文编辑:admin

本文相关文章:


regexp tcl(TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1)

regexp tcl(TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1)

其实regexp tcl的问题并不复杂,但是又很多的朋友都不太了解TCL脚本语言中Isearch命令% lsearch $a y* 2 % lsearch $a y -1,因此呢,今天小编就来为大家分享regexp tcl的一些知识,希望可

2026年7月20日 01:20

更多文章:


sqrt函数用法jupyter(C语言中开平方函数是什么)

sqrt函数用法jupyter(C语言中开平方函数是什么)

本篇文章给大家谈谈sqrt函数用法jupyter,以及C语言中开平方函数是什么对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月11日 21:00

ai无法打开svg图片(ai无法打开插图怎么办)

ai无法打开svg图片(ai无法打开插图怎么办)

大家好,关于ai无法打开svg图片很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于ai无法打开插图怎么办的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 20:10

16进制小减大怎么运算(十六进制数加减法规则)

16进制小减大怎么运算(十六进制数加减法规则)

其实16进制小减大怎么运算的问题并不复杂,但是又很多的朋友都不太了解十六进制数加减法规则,因此呢,今天小编就来为大家分享16进制小减大怎么运算的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

2026年10月11日 17:30

免费翻译器英文翻中文(中文翻译英文的软件免费)

免费翻译器英文翻中文(中文翻译英文的软件免费)

这篇文章给大家聊聊关于免费翻译器英文翻中文,以及中文翻译英文的软件免费对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 11:40

全民体育欧冠直播(电竞发展成为全民体育活动,合适吗)

全民体育欧冠直播(电竞发展成为全民体育活动,合适吗)

各位老铁们好,相信很多人对全民体育欧冠直播都不是特别的了解,因此呢,今天就来为大家分享下关于全民体育欧冠直播以及电竞发展成为全民体育活动,合适吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 11:10

withdrawal(withdrawal是什么意思)

withdrawal(withdrawal是什么意思)

今天给各位分享withdrawal是什么意思的知识,其中也会对withdrawal是什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 07:00

根据流程图怎么编写程序(用c语言根据流程图写程序)

根据流程图怎么编写程序(用c语言根据流程图写程序)

大家好,今天小编来为大家解答以下的问题,关于根据流程图怎么编写程序,用c语言根据流程图写程序这个很多人还不知道,现在让我们一起来看看吧!

2026年10月11日 06:00

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

在from子句中可以出现(如何在from 子句中嵌套查询下面的语句在access中出错!)

大家好,关于在from子句中可以出现很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何在from 子句中嵌套查询下面的语句在access中出错!的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望

2026年10月11日 05:20

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

countif函数统计个数怎么用(countif函数怎么用 详解Excel中countif函数的使用方法)

其实countif函数统计个数怎么用的问题并不复杂,但是又很多的朋友都不太了解countif函数怎么用 详解Excel中countif函数的使用方法,因此呢,今天小编就来为大家分享countif函数统计个数怎么用的一些知识,希望可以帮助到大

2026年10月11日 03:30

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

正则匹配数字之前的字符(正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式)

本篇文章给大家谈谈正则匹配数字之前的字符,以及正则表达式如何匹配前面是数字、中间是“/”、后面也是数字,就像2/3专业的模式对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问

2026年10月11日 03:00

最近更新

国家医保下载(医保怎么下载app)
2026-10-11 21:40:18 浏览:0
r17oppo充电多少w(oppor17多少瓦快充)
2026-10-11 21:20:02 浏览:0
热门文章

标签列表