| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 2、Elasticsearch分词器简介与使用(一) -> 正文阅读 |
|
[大数据]2、Elasticsearch分词器简介与使用(一) |
一、分词器的概念1、Analysis Phase在文档(Document)被添加到反向索引(inverted index)之前,Elasticsearch 对文档正文执行的过程称为分析阶段(Analysis Phase)。如下图所示,可以很形象的说明一个文档被 Ingest Node 接入时需要经历的步骤: 分析阶段的这部分就是分析器 Analyzer,通常是由 Char Filters、Tokenizer、Token Filter 组成的,它们的功能和特点如下:
请注意,一个?Analyzer 只能有一个?Tokenizer ,但可以有0或多个Char Filters,有0或多个Token Filter。例如,ES 默认的缺省分析器是?standard 分析器,它没有 Char Filters,分词器为 standard?Tokenizer,通过 Token Filter 会将英文单词大写转小写,会去除停用词(如 of,the 这些单词)等。 2、Analysis APIAnalyzer 将文本字符分解为 token 的过程,通常会发生在以下两种场景:一是索引建立的时候,二是进行文本搜索的时候。Analyzer 也提供了一套常用?API 给开发者使用,通过这些 API 可以测试如何解析输入的文本字符串,了解一下:
接下来,使用这些 API 来学习和使用内置分词器和第三方的分词器。 二、ES 内置分词器ES 本身提供了比较丰富的开箱即用的 Analyzer,例如:standard、simple、whitespace、stop、keyword、pattern、language、fingerprint 等内置分词器,其中 standard 是 ES 索引默认的分词器,更多更详细的介绍说明可以参考官方文档: Built-in analyzer reference | Elasticsearch Guide [7.17] | Elastic 接下来,一起看下这些分词器的特点以及如何使用的? 1、standard 分词器它是 ES 的缺省分词器,特点如下:无Char Filter,使用的是 standard tokonizer,会转小写,会过滤大多数的标点符号。 举例说明: 使用 _analyze 对文本进行分词测试: ?得到的结果如下:(结果显示,英文单词转成了小写,空白符和感叹号被过滤)
2、simple?分词器该分词器会按照非字母字符切分,会转小写,会过滤掉数字和标点符号,仍用上面的文本举例说明: ?得到的结果如下:
3、whitespace?分词器顾名思义,它是按照空白字符进行切分的,不会小写转换,也不会过滤数字和标点符号等,继续用上面的文本举例说明: ?得到的结果如下:
4、stop?分词器该分词器会删除停用词(比如,of,is, a, the?....),会转小写,会过滤掉数字和标点符号,继续用上面的文本举例说明: ?得到的结果如下:(与 simple 分词器比较像)
5、keyword?分词器该分词器根据输入文本进行输出,不做任何转换。注意,Analyzer 只作用于text 类型的字段,而对于 keyword 类型的字段,将不被分析和分词,keyword 字段更倾向于被用在精确匹配及聚合。 ?6、pattern?分词器该分词器会按照给定的 Java 正则表达式切分,默认支持字符串转小写和使用停用词。该分词器的使用有一定的难度,前提需要熟悉正则表达式,实际中不太使用这种分词器。另外,如果需要自定义该分词器,可以参考官方文档给出的例子: Pattern analyzer | Elasticsearch Guide [7.17] | Elastic 7、language?分词器顾名思义,该分词器会按照给定的语言类型切分,支持很多的语言类型,有: 不同的语言类型对应了该语言的分词器,常用的有 english 分词器,french 分词器等,具体使用可以参考官方文档给出的例子: Language analyzers | Elasticsearch Guide [7.17] | Elastic language 分词器支持使用停止词,支持从词干(stem)排除单词,比如?english 分词器会按词干进行分词: ?得到的结果如下:(可以看到,分词后的结果会有think,而think就是词干)
8、fingerprint?分词器该分词器通过一种指纹算法,支持过滤扩展字符,支持排序,支持去重,通过配置还可以支持使用停止词。该分词器用法不再举例了,需要使用它时,可参考官方文档给出的例子: Fingerprint analyzer | Elasticsearch Guide [7.17] | Elastic 三、中文分词器及使用ES 内置的分词器并不能满足中文分词的需求,例如,文本内容为"阿富汗紧张局势",使用?standard?分词器和 english 分词器时,会切分每一个单词,其余的分词器则直接切分成"阿富汗紧张局势",这明显不符合中文分词需求。因此,我们需要额外安装中文分词器解决中文分词问题。目前比较流行的中文分词器有:ik中文分词器、hanlp中文分词器等,这里会重点说明 ik 中文分词器。 1、ik 中文分词器ik 中文分词器实现了以词典分词为基础的正反向全切分(ik_smart),以及正反向最大匹配切分(ik_max_word)两种类型,ik_smart 是将文本做最粗粒度的拆分,而 ik_max_word 会做最细粒度的拆分。因为 ik 中文分词器是第三方插件,注意下载时需要对应当前的?Elasticsearch 版本,下载地址: Releases · medcl/elasticsearch-analysis-ik · GitHub 我使用的是 6.8.6 版本,下载和解压的操作步骤,如下:
将 ik 分词器的压缩包解压后,重启 Elasticsearch 就可以使用了。如果 wget 命令无法下载,可访问上面的 Releases 插件地址,找到对应的ik插件版本下载到本地,然后再上传到服务器,需要将zip解压在 ./plugins/ik/位置。通过如下命令,检查 ik 插件是否安装成功:
接着,使用?ik_smart?做下测试,如下: ?然后,使用?ik_max_word?做下测试,如下: ik_max_word??得到的结果:(可以看到拆分词项的粒度更细)
2、hanlp 中文分词器该分词器是专门为 Elasticsearch 设计的一款开源的中文分词器,基于HanLP?提供了 HanLP 中大部分的分词方式。hanlp 中文分词器一直在跟随 Elasticsearch 的不同发行版而更新着,目前最新版本为7.10.2,源码地址如下: GitHub - KennFalcon/elasticsearch-analysis-hanlp: HanLP Analyzer for Elasticsearch 从 GitHub 给出的文档来看,可通过以下两种方式进行下载安装 ES 对应 Plugin Release 版本: 方式一 a. 下载对应的 release 安装包,最新 release 包可从baidu盘下载(链接:百度网盘 请输入提取码?密码:i0o7) b. 执行如下命令安装,其中 PATH 为插件包绝对路径:
方式二 a. 使用 elasticsearch 插件脚本安装命令如下:
请注意,release 包中存放的为 HanLP 源码中默认的分词数据,若要下载完整版数据包,可查看HanLP Release。数据包目录:ES_HOME/plugins/analysis-hanlp,因原版数据包自定义词典部分文件名为中文,这里的hanlp.properties中已修改为英文,使用时请对应修改文件名。 在本版本中增加了词典热更新,修改步骤如下:(每个节点都需要做这种更改)
hanlp 中文分词器的分词方式有:
举例说明:
得到结果如下:
如果需要更进一步了解远程词典配置、自定义分词配置等,请参考:GitHub - KennFalcon/elasticsearch-analysis-hanlp: HanLP Analyzer for Elasticsearch 最后本篇重点介绍了 Elasticsearch 分词器的概念,内置分词器的类型及使用,以及第三方中文分词器的使用,掌握这些分词器的特点之后,在不同的查询场景中选择合适的分词器就会游刃有余了,当然,也可以定制满足项目需求的分词器,下篇再重点介绍如何定制分词器。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:40:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |