Elasticsearch 分词器

news/2024/11/25 0:26:26/

一、分词器的作用

分词器(Analyzer)是Elasticsearch中用于文本分析与处理的组件。它的主要作用是将用户输入的一段文本,按照一定逻辑分析成多个词语。这个过程也叫做文本分析或文本切分。

二、分词器的构成

分词器由三部分组成:字符过滤器(Character Filters)、分词器(Tokenizer)和标记过滤器(Token Filters)。

  1. 字符过滤器:接收原字符流,通过添加、删除或者替换操作改变原字符流。例如,去除文本中的HTML标签,或者将罗马数字转换成阿拉伯数字等。
  2. 分词器:将文本切分为单个或多个分词。它是文本分析的核心部分,负责将文本拆分成词语。
  3. 标记过滤器:对分词后的结果进行过滤和处理。例如,将所有英文单词小写化,或者删除英文中的停用词等。

三、分词器的使用

在Elasticsearch中,分词器可以在创建索引和搜索时使用。

  1. 创建索引时:当索引文档字符类型为text时,在建立索引时将会对该字段进行分词。此时,可以按照以下顺序确定使用哪个分词器:
    • 先判断字段是否有设置分词器,如果有,则使用字段属性上的分词器设置。
    • 如果设置了analysis.analyzer.default,则使用该设置的分词器。
    • 如果上面两个都未设置,则使用默认的standard分词器。
  2. 搜索时:当对一个text类型的字段进行全文检索时,会对用户输入的文本进行分词。此时,可以通过以下参数依次检查搜索时使用的分词器:
    • 搜索时指定analyzer参数。
    • 创建mapping时指定字段的search_analyzer属性。
    • 创建索引时指定setting的analysis.analyzer.default_search。
    • 如果上面几种都未设置,则使用默认的standard分词器。

四、内置分词器与自定义分词器

Elasticsearch提供了多种内置分词器,如标准分词器(Standard Analyzer)、语言分词器(如中文分词器)等。这些分词器可以根据不同的需求进行选择和配置。

同时,Elasticsearch也支持自定义分词器。用户可以根据自己的需求编写分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。

1、内置分词器

  1. 标准分词器(Standard Analyzer)
    • Elasticsearch的默认分词器。
    • 根据空格和标点符号将文本拆分为词项,并进行小写转换和标点符号过滤。
    • 适用于大多数情况,但对中文文本的支持不够理想。
  2. 简单分词器(Simple Analyzer)
    • 通过非字母字符来分割文本。
    • 将单词转换为小写形式,并去除数字类型的字符。
    • 适用于简单的文本处理需求,不适用于需要处理复杂文本的场景。
  3. 空白分词器(Whitespace Analyzer)
    • 仅通过空格来分割文本,不进行其他处理。
    • 适用于需要保留原始文本的场景。
  4. 关键字分词器(Keyword Analyzer)
    • 不对文本进行拆分,将整个文本作为一个词项。
    • 通常用于不需要进行分词的字段,如关键字字段或精确匹配字段。
  5. 模式分词器(Pattern Analyzer)
    • 允许用户自定义拆分模式,通过正则表达式来定义Token的拆分规则。
    • 适用于需要灵活控制文本拆分的场景。
  6. 停止词分词器(Stop Analyzer)
    • 与简单分词器类似,但增加了对删除停止词的支持。
    • 默认使用英语停止词列表,如“the”、“a”、“an”等。
  7. 语言分词器
    • Elasticsearch还提供了多种针对特定语言的分词器,如英语、中文、法语等。
    • 这些分词器会根据特定的语言规则和特征进行分词处理,以提供更准确的分词效果。

2、第三方分词器

  1. IK分词器
    • 一个开源的、基于Java语言开发的中文分词工具包。
    • 提供了两种分词算法:ik_smart(最少切分)和ik_max_word(最细粒度划分)。
    • 支持词库扩展和自定义词典,适用于对中文文本的更精确分词和分析需求。
  2. Smart Chinese Analyzer(smartcn)
    • Elasticsearch内置的中文分词器。
    • 使用机器学习算法进行分词,适用于简体中文和繁体中文。
    • 易于使用,无需额外配置,具有较高的分词准确性和召回率。
  3. 拼音分词器
    • 可以将中文分成对应的全拼、全拼首字母等。
    • 在搜索框中输入拼音时,可以出现对应的目标结果。

3、自定义分词器

用户还可以根据自己的需求编写自定义分词器,实现自定义的拆分规则和词语处理逻辑。自定义分词器需要编写自己的分词器和字符过滤器,并在Elasticsearch中注册分词器。

五、分词器的安装与配置

在Elasticsearch中,分词器通常是以插件的形式进行安装的。用户可以从相应分词插件的官网或git上下载插件包,然后将其上传到Elasticsearch集群所在的节点,并使用命令进行安装。安装完成后,还需要重启Elasticsearch服务以使分词插件生效。

在配置分词器时,用户可以在创建索引时指定分词器的相关设置,包括字符过滤器、分词器和标记过滤器等。

六、分词示例

以IK分词器为例,IK分词器是Elasticsearch的一个中文分词插件,它提供了多种分词模式供用户选择。以下是一个使用IK分词器的示例:

GET _analyze/?pretty
{"analyzer": "ik_smart","text": "庆祝祖国六十岁生日快乐"
}

返回结果中,分词器将传入的text文本分割为了若干个词汇短语,如“庆祝”、“祖国”、“六十岁”等。


http://www.ppmy.cn/news/1549672.html

相关文章

【计算机网络】解决bind error

服务器有时可以立即重启,有时候无法立即重启 — bind error 首先要知道:四次挥手动作完成之后,主动断开连接的一方要维持一段时间的TIME_WAIT bind error原因:因为是服务器主动断开的,所以服务器要去维持TIME_WAIT状…

【element-tiptap】Tiptap编辑器核心概念----内容、扩展与词汇

前言:本篇文章继续来讲Tiptap编辑器的核心概念,主要是内容、扩展、词汇相关的概念 (一)内容 文档内容被存储在编辑器实例的 state 属性中。所有的修改都会以事务 transaction 的形式应用于 state。state 详细介绍了当前的内容、…

java编程开发基础,正则表达式的使用案例Demo

java编程开发基础,正则表达式的使用案例Demo!实际开发中,经常遇到一些字符串,信息的裁剪和提取操作,正则表达式是经常使用的,下面的案例,可以帮助大家快速的了解和熟悉,正则表达式的使用技巧。 package com…

小红书/小绿书笔记保存攻略:图片去水印保存,文案一键复制

家人们,原来这么简单啊 上教程, 这样保存的图片无水印, 这样轻松可以复制文案, 完全免费呀 #免费去水印 #干货分享 #视频去水印 #图片去水印 #文案复制 #文案保存 #保存笔记 #视频下载 #小红书笔记保存 #去水印教程 #新媒体运营工…

使用脚本判断网络连接状态,并且添加对应路由

这个脚本通过不断检测有线网络和4G网络的连通性来动态调整默认路由。如果两个网络都可用,则优先使用4G网络。如果只有一个网络可用,则使用该网络。如果两个网络都不可用,则每秒钟检测一次,连续30次检测失败后重启设备。 #!/bin/b…

Cargo Rust 的包管理器

Cargo->Rust 的包管理器 Cargi简介Cargo 的主要功能1. 创建项目2. 管理依赖3. 构建项目4. 运行项目5. 测试代码6. 检查代码7. 生成文档8. 发布和分享包 Cargo 的核心文件1. Cargo.toml2. Cargo.lock **Cargo 的生态系统** 常用命令总结Hello, Cargo! 示例 Cargi简介 Cargo …

计算机网络(14)ip地址超详解

先看图: 注意看第三列蓝色标注的点不会改变,A类地址第一个比特只会是0,B类是10,C类是110,D类是1110,E类是1111. IPv4地址根据其用途和网络规模的不同,分为五个主要类别(A、B、C、D、…

R语言 | 宽数据变成一列,保留对应的行名和列名

对应稀疏矩阵 转为 宽数据框,见 数据格式转换 | 稀疏矩阵3列还原为原始矩阵/数据框,自定义函数 df3toMatrix() 目的:比如查看鸢尾花整体的指标分布,4个指标分开,画到一个图中。每个品种画一个图。 1.数据整理&#…