Elasticsearch Analyzer原理分析并实现中文分词

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch Analyzer原理分析并实现中文分词

首先,我们知道倒排索引的原理,我们需要构建一个单词词典,但是这个词典里面的数据怎么来呢?我们需要对输入的东西进行分词。这个ES已经考虑过了,所以它内置了一些分词器,但是中国文化,博大精深,有时候自己断句都会有误差,所以我们会用一些国人的插件进行中文分词。这篇文章的重点也就是介绍ES分词原理、内置分词和中文分词。

ES分词是如何实现?

Analysis(分析)是通过Analyzer(分析器)实现的,分析也是有步骤的,所以我们说一下Analyzer的组成。

分词器主要由三部分组成:

  1. Character Filters 字符过滤器 比方说剔除html代码特殊符号等等,可以有多个字符过滤器
  2. Tokenizer 分词器 对语句进行分词只能有一个
  3. Token Filter token过滤器  对词进行过滤、或者转小写、等等,可以有多个token filter,依次执行

ES内置分词器分析

我们知道了分词器的组成,只需要再知道它的一些实现即可。我们也列出来方便查看

  • standard

默认的分词器,按词分类并且小写处理。这个我们举个例子,其余大家照葫芦画瓢就行

我这里是利用Kibanadev tool进行api调试,大家也可以用postman等工具进行测试。ES提供_analyze api来测试分词。

GET _analyze
{
  "analyzer": "standard", # 分词器
  "text":     "The quick brown fox." # 输入的语句
}
  • simple

安照非字母切分,不是字母就剔除了,包括标点符号数字等,并对单词进行小写处理

  • stop

对输入进行小写处理,并将停用词过滤,例如这些单词(the,a, is)

  • whitespace

按空格切分

  • keyword

不分词,当成一整个 term 输出

  • pattern

通过正则表达式进行分词,默认是 \W+(非字母进行分隔)

  • Language

举个例子按英文拆分,它支持不同的语言,例如:arabic, armenian, basque, bengali, bulgarian, catalan, czech, dutch, english, finnish, french, galician, german, hindi, hungarian, indonesian, irish, italian, latvian, lithuanian, norwegian, portuguese, romanian, russian, sorani, spanish, swedish, turkish.

#english
GET _analyze
{
  "analyzer": "english",
  "text": "I'm Aoppp 憧憬"
}

上面例子典型对中文就不太友好,中文分词要比英文分词难,英文都以空格分隔,中文理解通常需要上下文理解才能有正确的理解,比如 [苹果,不大好吃]和[苹果,不大,好吃],这两句意思就不一样。

中文分词

这个中文分词插件也不少,我也列举一些给大家。

  • analysis-icu

地址:https://github.com/elastic/elasticsearch-analysis-icu

直接安装就行 bin/plugin install analysis-icu

  • analysis-ik

地址:https://github.com/medcl/elasticsearch-analysis-ik

IK Analysis插件将Lucene IK分析器集成到elasticsearch中,支持自定义词典。

  • elasticsearch-thulac-plugin

地址:https://github.com/microbun/elasticsearch-thulac-plugin

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。

这里的话ik还不错,可以自定义词典等等,我来用它举个例子吧

安装

这里我的ES是7.6的,你们要安装对应版本改一下就行

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.0/elasticsearch-analysis-ik-7.6.0.zip

安装完成重启一下ES

效果

GET _analyze
{
  "analyzer": "ik_max_word", # 穷进可能
  "text": "这是憧憬的技术分享博客啊"
}

比因为的单字拆分还是漂亮。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
目录
相关文章
|
7月前
|
存储 SQL Apache
为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
本文将从技术选型的视角,从开放性、系统架构、实时写入、实时存储、实时查询等多方面,深入分析 Apache Doris 与 Elasticsearch 的能力差异及性能表现
566 17
为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
|
10月前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
411 8
|
11月前
|
存储 SQL 监控
|
11月前
|
运维 监控 安全
|
存储 缓存 自然语言处理
深度解析ElasticSearch:构建高效搜索与分析的基石
【9月更文挑战第8天】在数据爆炸的时代,如何快速、准确地从海量数据中检索出有价值的信息成为了企业面临的重要挑战。ElasticSearch,作为一款基于Lucene的开源分布式搜索和分析引擎,凭借其强大的实时搜索、分析和扩展能力,成为了众多企业的首选。本文将深入解析ElasticSearch的核心原理、架构设计及优化实践,帮助读者全面理解这一强大的工具。
590 8
|
存储 数据采集 数据处理
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
数据处理神器Elasticsearch_Pipeline:原理、配置与实战指南
561 12
|
存储 数据可视化 数据挖掘
使用Elasticsearch进行实时数据分析与预测
【8月更文第28天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,它能够实时地存储、检索以及分析大规模的数据集。结合 Logstash 和 Kibana,它们共同构成了 Elastic Stack,这是一套强大的工具组合,适用于收集、存储、分析和可视化数据。
541 0
|
运维 监控 Java
在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。
【7月更文挑战第1天】在大数据场景下,Elasticsearch作为分布式搜索与分析引擎,因其扩展性和易用性成为全文检索首选。本文讲解如何在Java中集成Elasticsearch,包括安装配置、使用RestHighLevelClient连接、创建索引和文档操作,以及全文检索查询。此外,还涉及高级查询、性能优化和故障排查,帮助开发者高效处理非结构化数据。
195 0
|
5月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
2165 0
|
6月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
897 1