ES中文检索须知:分词器与中文分词器

ElasticSearch (es)的核心功能即为数据检索,常被用来构建内部搜索引擎或者实现大规模数据在推荐召回流程中的粗排过程

ES分词

分词即为将doc通过Analyzer切分成一个一个Term(关键字),es分词在索引构建数据检索时均有体现:

  1. 构建倒排索引时每一个term都指向包含这个term的多个doc。
  2. 搜索时需要通过分词将查询语句切分成一个一个term进行检索。

简单来说,ES的数据检索原理包含分词、基于分词结果计算相似度得分按得分从高到低排序返回指定长度下的排序结果三个主要步骤,本文主要关注中文场景下的分词过程。

query
分词
基于分词结果计算相似度得分
按得分从高到低返回指定长度下的排序结果

ES内置分词器

ES官方内置了一些常用的分词器(Analyzer,分词器在NLP中称为tokenzier,es使用analyzer的原因是除了分词之外后续还会进行一些文本分析的动作):

the quick brown-foxes jumped over the lazy dog’s bone. 该英语句子是一个经典的自然语言处理例句,它是全字母句,包含了全部26个字母。

分词器作用分词对象结果示例
Standard Analyzer标准分词器,也是默认的分词器,基于Unicode文本分割算法。默认分词器适用于英语,并且对大多数语言都有效The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog’s, bone ]
Simple Analyzer简单分词器,基于非字母字符进行分词,单词会转为小写字母,非字母字符如数字、空格、连字符和撇号将被丢弃The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
Whitespace Analyzer空格分词器,按空格进行切分The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog’s, bone. ]
Stop Analyzer在简单分词器的基础上增加了停用词的功能The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]
Keyword Analyzer关键词分词器,将整个输入句子认为是关键字直接返回,不分词The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.]
Pattern Analyzerpatter分词器,patter指的是正则的pattern,利用正则表达式对文本进行切分,支持停用词The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]
Language Analyer针对特定语言的分析器--
Fingerprint Analyzer指纹分词器,是一种专业分词器,可通过创建指纹来进行重复检测的--
Custom Analyzer如果以上没有符合需求的分词器,es也允许通过添加插件的方式添加自定义分词器--

注:停用词,英文称为Stop Words,是在信息检索和自然语言处理过程中,为了节省存储空间和提高搜索效率,系统会自动过滤掉某些出现频率高但又不具有实际意义的字或词。这些被过滤的词语通常包括语气词、连词、介词等,例如汉语中的“的”、“以及”、“甚至”、“吧”,以及英语中的“the”、“a”、“also”等。

在中文场景下,有一个踩坑点是,默认的Standard Analyzer会按照一个汉字一个汉字切分的方式来分词,这样构建的索引缺乏语义信息,导致检索效果不佳,因而中文场景下需要使用专门的分词器。
在这里插入图片描述

中文分词器

常用的中文分词器有两个比较主流的:ik analyzersmartcn(Smart Chinese Analyzer)

ik analyzer

ik analyzer 是一个基于开源项目IK Analysis进行开发的第三方的中文分词器。IK Analyzer提供了细粒度的中文分词能力,支持词库扩展、自定义词典、停用词过滤、同义词扩展等功能,可以根据具体需求进行匹配和定制。适用于更精确的分词和分析需求。

ik analyzer支持两种分词方法,可以在构建索引时指定:

  1. ik_max_word:将需要分词的文本做最小粒度的拆分,尽可能分出更多的词
  2. ik_smart_word:将需要分词的文本做最大粒度的拆分,尽可能分出更少的词

git上下载插件,存到es插件目录,重启es服务即可使用:

wget https://github.com/medcl/elasticsearch-analysis-ik/releases
smartcn

smartcn是es内置的中文分词器,使用机器学习算法进行分词,同时适用于简体中文和繁体中文,具有较高的分词准确率和召回率,适用于大多数中文文本检索场景。因为是内置的,所以优点是无需额外配置即可使用。

参考文献

  1. ElasticSearch 中的中文分词器以及索引基本操作详解
  2. 【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师
  3. ELK(六)分词器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/636607.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 下最好用的流程图软件Visio

keywords: Visio 小问题记录 连接线箭头 如果在 Visio 2013/2016 里画流程图,发现连接线没有箭头,检查一下「设计」菜单里是否将主题设置成了「无主题」,如果是,取消掉就好了。 鼠标悬停提示 把鼠标悬停在图形上四周应该有几…

c++ - 空间申请和释放 new/delete

文章目录 一、c/c内存分布二、new/delete 的使用三、malloc/free 和 new/delete 的对比四、new/delete 的实现原理五、匹配问题 一、c/c内存分布 求下面各个变量的位置 // c/c内存分布int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar …

Android开发——Fragment

Demo fragment_blank.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_pare…

Fannel和Calico

一 1、路由器下面每一个端口都是一个vlan,隔离了广播包 192.168.1.0和192.168.2.0他们属于不同的vlan,没有三层交换机或者路由器,他们通不了信 不在同一个vlan,也就是子网,包就会走向网关(也就是路由器那里,路由器有路由表。查看目的地192.168.2.0在b口,从b口出去vlan…

Python编程技巧揭秘:深入理解Lambda函数,如何使用匿名函数简化你的代码

文章目录 1. Lambda函数2. 在实际应用中使用Lambda2.1 使用Lambda函数进行列表排序2.2 在高阶函数中使用Lambda 3. Lambda的局限性和注意点 在这篇文章中&#xff0c;将深入探讨Python中的Lambda函数&#xff0c;这是一种强大的编程工具&#xff0c;可以以更简洁、高效的方式编…

Java基于微信小程序的讲座预约系统的研究与实现,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

PCDN与边缘计算的集成解决方案

PCDN与边缘计算的集成解决方案 在数字化时代&#xff0c;内容的快速、安全地传递至用户变得至关重要。无论是媒体、教育还是其他领域&#xff0c;所有这些行业都需要强大的技术支持以保证信息的实时更新和安全传输。PCDN&#xff08;Peer Content Delivery Network&#xff0c…

c++——类和对象(1)构造,析构函数

类的六个默认函数 如果一个类当中没有成员的话&#xff0c;那叫空类&#xff0c;实际上空类有6个编译器默认生成的函数成员 默认成员函数&#xff1a;没有显示实现&#xff0c;编译器生成的成员函数称为默认成员函数 1&#xff0c;构造函数与构析函数 1.1构造函数的概念 构造…

【MATLAB源码-第194期】基于matlab的MB-OFDM仿真,超宽带(UWB)无线传输。对比LS/DFT及其改进算法。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 一、无线通信的基本原理 无线通信是通过空气或其他介质传播电磁波来传输信息的技术。这种通信方式的核心在于电磁波&#xff0c;它能够在没有物理连接的情况下传输数据。无线通信的基本流程包括&#xff1a; 信号的生成&am…

python使用uiautomator2操作真机(oppo a9x)

环境&#xff1a; python3.8.10&#xff0c;oppo a9x(6G,128g)&#xff0c;版本android 11。 之前写过文章&#xff1a; python使用uiautomator2操作真机&#xff08;荣耀10青春版&#xff09;_python uiautomator2 控制真机-CSDN博客 python使用uiautomator2操作真机&…

c语言之字符串的集合存放形式

采用指针分配的二维数组与直接定义的二维数组&#xff0c;sizeof的不同 采用指针分配的二维数组&#xff1a; 它的遍历方式是&#xff1a; 上面这个是分配二级指针的地址&#xff0c;二级指针就是一片可以用来分配一级指针空间的地址&#xff0c;然后指针寻址本来就可以当成数组…

K8s 部署 MySQL 8.0.20 主从复制结构

一、K8s 部署 MySQL 安装规划 组件replicas类型mysql-master1StatefulSetmysql-slave1StatefulSet 使用 k8s 版本为&#xff1a;v1.18.0 。 本次使用 OpenEBS 来作为存储引擎&#xff0c;OpenEBS 是一个开源的、可扩展的存储平台&#xff0c;它提供了一种简单的方式来创建和…