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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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": "这是憧憬的技术分享博客啊"
}

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

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
存储 搜索推荐 数据挖掘
ElasticSearch架构介绍及原理解析
ElasticSearch架构介绍及原理解析
81 0
|
4月前
|
搜索推荐 Java 数据处理
Elasticsearch搜索分析引擎本地部署与远程访问
Elasticsearch搜索分析引擎本地部署与远程访问
|
8月前
|
自然语言处理 Java Maven
Elasticsearch系列——安装中文分词插件elasticsearch-analysis-ik
Elasticsearch系列——安装中文分词插件elasticsearch-analysis-ik
|
8月前
|
定位技术
Elasticsearch之基于地理位置进行聚合分析
Elasticsearch之基于地理位置进行聚合分析
|
8月前
|
存储 自然语言处理 负载均衡
|
4月前
|
存储 SQL 监控
从 Elasticsearch 到 SelectDB,观测云实现日志存储与分析的 10 倍性价比提升
SelectDB 助力观测云完成日志数据存储和分析架构升级,实现整体性价比 10 倍提升,为日志存储和分析场景服务提供强大动力。
|
5月前
|
存储 负载均衡 算法
分布式系列教程(36) -ElasticSearch集群原理
分布式系列教程(36) -ElasticSearch集群原理
44 0
|
7月前
|
存储 缓存 算法
ElasticSearch工作原理
ElasticSearch工作原理
56 0
|
8月前
|
关系型数据库 MySQL Java
基于Elasticsearch+Logstash+Kibana的小型流量分析系统
基于Elasticsearch+Logstash+Kibana的小型流量分析系统
|
8月前
|
存储 搜索推荐 数据挖掘
深入探索Elasticsearch搜索引擎:高效搜索和分析的利器
在现代信息时代,数据量爆炸式增长,如何高效地搜索、分析和检索数据成为了一个重要的挑战。Elasticsearch作为一款分布式、实时搜索和分析引擎,为我们提供了强大的解决方案。本文将深入探讨Elasticsearch的基本概念、特点,以及如何在实际应用中应用它来实现高效的搜索和分析。
81 1