Elasticsearch之Analyzer分词器介绍
Elasticsearch之Analyzer分词器介绍
- Analysis
- Analyzer的组成
- ES中内置的分词器
- Analyzer的使用
- 几种分词器介绍
- Standard Analyzer
- Simple Analyzer
- Stop Analyzer
- Whitespace Analyzer
- Keyword Analyzer
- Pattern Analyzer
- Language Analyzer
Analysis
Analysis文本分析,也叫分词,是把全文本转换为一系列单词的过程。
Analyzer叫做分词器。Analysis是通过Analyzer来实现的,ES当中内置了很多分词器,同时我们也可以按需定制化分词器。
分词器的作用,除了在数据写入时对需要分词的字段进行词条切分转换,同时匹配Query语句的时候也需要使用相同的分词器对查询语句进行分析。
例如:
Elasticsearch is fun
这个文本就会被分词器切分成,elasticsaerch、is、fun
三个单词。
Analyzer的组成
通常Analyzer由三个部分组成。
- Character Filters:针对原始文本处理,例如去除html标签等。
- Tokenizer:按照一定的规则,对字符串进行切分单词。
- Token Filter:将切分的单词进行加工、大小写转换、删除stopwords、增加同义词等。
ES中内置的分词器
- Standard Analyzer:默认分词器,按词切分,小写处理
- Simple Analyzer:按照非字母切分(符号被过滤),小写处理
- Stop Analyzer:小写处理,停用词过滤器(the、a、is等)
- Whitespace Analyzer:按照空格切分,不转小写
- Keyword Analyzer:不分词,直接将输入当作输出
- Patter Analyzer:正则表达式,默认\W+(非字符分割)
- Language:提供了30多种常见语言的分词器
- Customer Analyzer:自定义分词器
Analyzer的使用
我们可以直接指定Analyzer进行分词测试。
举例:比如我们现在要查看一下ES是如何进行分词的。
GET /_analyze
{"analyzer": "standard","text":"Elasticsearch is fun"
}
返回如下,可以看到分词结果。token表示分词的单词,start_offset表示单词在文档中的开始位置,end_offset表示单词在文档中的结束位置,type表示单词的类型(文本/数字…),position表示单词在文档中的位置。
{"tokens" : [{"token" : "elasticsearch","start_offset" : 0,"end_offset" : 13,"type" : "<ALPHANUM>","position" : 0},{"token" : "is","start_offset" : 14,"end_offset" : 16,"type" : "<ALPHANUM>","position" : 1},{"token" : "fun","start_offset" : 17,"end_offset" : 20,"type" : "<ALPHANUM>","position" : 2}]
}
我们也可以指定索引的字段来进行分词测试,可以看到这个字段是如何对文本进行分词的。
比如我们要指定索引index
中的字段comment
字段来进行分词测试,发起请求如下:
post index/_analyze
{"field":"comment","text":"ES真好玩"
}
可以看到把我们输入的文本进行了分词处理。
{"tokens" : [{"token" : "es","start_offset" : 0,"end_offset" : 2,"type" : "<ALPHANUM>","position" : 0},{"token" : "真","start_offset" : 2,"end_offset" : 3,"type" : "<IDEOGRAPHIC>","position" : 1},{"token" : "好","start_offset" : 3,"end_offset" : 4,"type" : "<IDEOGRAPHIC>","position" : 2},{"token" : "玩","start_offset" : 4,"end_offset" : 5,"type" : "<IDEOGRAPHIC>","position" : 3}]
}
我们也可以自定义分词器进行测试
post /_analyze
{"tokenizer":"standard","filter":["lowercase"],"text":"Elasticsearch is FUN"
}
{"tokens" : [{"token" : "elasticsearch","start_offset" : 0,"end_offset" : 13,"type" : "<ALPHANUM>","position" : 0},{"token" : "is","start_offset" : 14,"end_offset" : 16,"type" : "<ALPHANUM>","position" : 1},{"token" : "fun","start_offset" : 17,"end_offset" : 20,"type" : "<ALPHANUM>","position" : 2}]
}
几种分词器介绍
Standard Analyzer
Standard Analyzer
是ES中默认的分词器,它有几个规则:
- 按照单词进行切分
- 小写处理
- 它的Stop(词过滤器,is、the等)默认是关闭的。
GET /_analyze
{"analyzer": "standard","text":" 1 Elasticsearch is FUN5."
}{"tokens" : [{"token" : "1","start_offset" : 1,"end_offset" : 2,"type" : "<NUM>","position" : 0},{"token" : "elasticsearch","start_offset" : 3,"end_offset" : 16,"type" : "<ALPHANUM>","position" : 1},{"token" : "is","start_offset" : 17,"end_offset" : 19,"type" : "<ALPHANUM>","position" : 2},{"token" : "fun5","start_offset" : 20,"end_offset" : 24,"type" : "<ALPHANUM>","position" : 3}]
}
可以看到standard分词器,就是按照空格进行分词,没有过滤掉is这种关键字,并且没有过滤掉数字等。
Simple Analyzer
- 按照非字母切分,非字母的都会被去除
- 小写处理
GET /_analyze
{"analyzer": "simple","text":" 1 Elasticsearch is FUN511asd."
}{"tokens" : [{"token" : "elasticsearch","start_offset" : 3,"end_offset" : 16,"type" : "word","position" : 0},{"token" : "is","start_offset" : 17,"end_offset" : 19,"type" : "word","position" : 1},{"token" : "fun","start_offset" : 20,"end_offset" : 23,"type" : "word","position" : 2},{"token" : "asd","start_offset" : 26,"end_offset" : 29,"type" : "word","position" : 3}]
}
可以看到Simple分词器,把最后单词FUN511asd中的进行了切分,切分成fun和asd(这里不仅仅是数字,只要是非字母都会切分、符号等),并且全部转小写处理。
Stop Analyzer
- 按照非字母切分,非字母的都会被去除
- 小写处理
- 多了stop filter,会将is、a、the等关键词去除
GET /_analyze
{"analyzer": "stop","text":" 1 Elasticsearch is FUN511asd."
}{"tokens" : [{"token" : "elasticsearch","start_offset" : 3,"end_offset" : 16,"type" : "word","position" : 0},{"token" : "fun","start_offset" : 20,"end_offset" : 23,"type" : "word","position" : 2},{"token" : "asd","start_offset" : 26,"end_offset" : 29,"type" : "word","position" : 3}]
}
可以看到stop除了有simple的功能,还将一些关键词,比如is进行了去除
Whitespace Analyzer
- 按照空格进行切分
GET /_analyze
{"analyzer": "whitespace","text":" 1 Elasticsearch is FUN511asd."
}{"tokens" : [{"token" : "1","start_offset" : 1,"end_offset" : 2,"type" : "word","position" : 0},{"token" : "Elasticsearch","start_offset" : 3,"end_offset" : 16,"type" : "word","position" : 1},{"token" : "is","start_offset" : 17,"end_offset" : 19,"type" : "word","position" : 2},{"token" : "FUN511asd.","start_offset" : 20,"end_offset" : 30,"type" : "word","position" : 3}]
}
Keyword Analyzer
- 不进行分词,直接将输入当作一个term输出
GET /_analyze
{"analyzer": "keyword","text":" 1 Elasticsearch is FUN511asd."
}{"tokens" : [{"token" : " 1 Elasticsearch is FUN511asd.","start_offset" : 0,"end_offset" : 30,"type" : "word","position" : 0}]
}
Pattern Analyzer
- 通过正则表达式进行分词
- 默认是\W+,非字符的符号进行分割
GET /_analyze
{"analyzer": "pattern","text":" 1 Elasticsearch is FUN511asd-a."
}{"tokens" : [{"token" : "1","start_offset" : 1,"end_offset" : 2,"type" : "word","position" : 0},{"token" : "elasticsearch","start_offset" : 3,"end_offset" : 16,"type" : "word","position" : 1},{"token" : "is","start_offset" : 17,"end_offset" : 19,"type" : "word","position" : 2},{"token" : "fun511asd","start_offset" : 20,"end_offset" : 29,"type" : "word","position" : 3},{"token" : "a","start_offset" : 30,"end_offset" : 31,"type" : "word","position" : 4}]
}
可以看到FUN511asd-a
被分成了fun511asd和a
Language Analyzer
可以指定不同的语言进行分词,比如English.
GET /_analyze
{"analyzer": "english","text":"ES真是太好玩了,Elasticsearch is FUN-fun"
}
但是对于中文来说,分词器就有了一些特定的难点:
- 一个句子,要被切分成一个个单词,而不是一个个的字。
- 在英文中,单词有空格进行分割,中文没有
- 一句中文,在不同的上下文语言环境中,有不同的意思
- 几句中文可能表达的是相同的意思,但是分词不同
我们可以安装不同的中文分词器
比如:
ICU Analyzer
IK-支持自定义词库,支持热更新分词字典
THULAC
Elasticsearch之Analyzer分词器介绍相关推荐
- “Elasticsearch + Kibana + ik分词器“介绍与使用
Elasticsearch 介绍 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 Elastic Stack 的核心,它集中存 ...
- Elasticsearch:ICU 分词器介绍
ICU Analysis 插件是一组将 Lucene ICU 模块集成到 Elasticsearch 中的库. 本质上,ICU 的目的是增加对 Unicode 和全球化的支持,以提供对亚洲语言更好的文 ...
- 【Elasticsearch】Elasticsearch analyzer 分词器
文章目录 1.概述 1.1 什么是analysis? 2.发生时期 3.开箱即用analyzer 3.1 默认的分词器 3.Analyze API 4.分词器介绍 4.1.标准分词器 Standard ...
- ElasticSearch常用的分词器
本文来说下有关ElasticSearch分词器的几个问题 文章目录 概述 什么是 Analysis 分词器的组成 Analyzer API ES分词器 Stamdard Analyzer Simple ...
- 04.ElasticSearch之IK分词器的安装与使用
ElasticSearch之IK分词器的安装与使用 前言 安装 离线安装 在线安装 ik分词器测试 扩展(停用)词(典) 测试数据 概念 配置词典 1.修改配置文件 2.新建词典 3.自定义内容 4. ...
- Elasticsearch插件之分词器
程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门 结合官网资料,做了更详细的实际使用总结. 从单机版安装到集群高可用生产环境搭建.基本概念(索引,分片,节点,倒排索引-).DS ...
- 【ES实战】ES分词器介绍
文章目录 ES分词器介绍 什么是分词器 分词器的组成 Character filters Tokenizers Token filters 分词的过程 写入时分词 搜索时分词 测试分词效果 分词器的分 ...
- 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...
- Elasticsearch之中文分词器插件es-ik(博主推荐)
前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch之中文分词器 Elasti ...
最新文章
- 宇宙的第一推动力,必然存在吗?
- JVM GC 日志详解
- 何为消息队列,为何使用消息队列,有什么消息队列插件
- 微信小程序 - 实现购物车结算
- JavaScript Tutorial
- 分布式理论(七): 一致性协议之 ZAB
- 讨厌麻烦的ora 01722无效数字
- 牛X网整理的JAVA面试题
- mysql分段统计ceil
- Vimium、CrxMouse配置信息
- 咋让计算机名字改为办公用计算机,让电脑变成历史:三星DeX将三星S8变成“办公电脑”...
- Windows字体美化指南
- matlab 判断鼠标按下_如何让MATLAB控制你的鼠标和键盘
- 学习Matlab的第一个程序——用二分法求根
- 第 342 场力扣周赛
- 书论55 郝经《移诸生论书法书》
- dotnet OpenXML 文本 Kerning 字间距的作用
- LVS+Keeplive 负载均衡
- 《瞳孔:一个开放源码平台,用于普遍的眼球追踪和基于移动凝视的交互》论文阅读
- MATLAB小提琴仿真(数学物理方程)大作业人工智能