带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(下)

简介: 带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(下)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.17.Text analysis, settings 及 mappings——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(中) https://developer.aliyun.com/article/1229400


pinyin 分词器

 

首先,下载 pinyin 分词器插件:https://github.com/medcl/elasticsearch-analysis-pinyin

 

本地编译并打包后,上传到 ES 安装目录下的 plugins 下并解压,然后重启 ES,重启后查看是否安装成功:

 

./bin/elasticsearch-plugin list
ik
pinyin


可以看到 pinyin 插件已经安装成功


PUT /analyze_chinese_pinyin/ 
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "pinyin_analyzer" : {
                    "tokenizer" : "my_pinyin"
                    }
            },
            "tokenizer" : {
                "my_pinyin" : {
                    "type" : "pinyin",
                    "keep_separate_first_letter" : false,
                    "keep_full_pinyin" : true,
                    "keep_original" : true,
                    "limit_first_letter_length" : 16,
                    "lowercase" : true,
                    "remove_duplicated_term" : true
                }
            }
        }
    }
}
GET /analyze_chinese_pinyin/_analyze
{
  "text": ["南京市长江大桥"],
  "analyzer": "pinyin_analyzer"
}
#返回结果
{
  "tokens" : [
    {
      "token" : "nan",
    },
    {
      "token" : "南京市长江大桥",
    },
    {
      "token" : "njscjdq",
    },
    {
      "token" : "jing",
    },
    {
      "token" : "shi",
    },
    {
      "token" : "chang",
    },
    {
      "token" : "jiang",
    },
    {
      "token" : "da",
    },
    {
      "token" : "qiao",
    }
  ]
}
#设置测试数据
POST analyze_chinese_pinyin/_bulk
{"index":{"_id":1}}
{"name":"南京市长江大桥"}
#根据拼音查询 njscjdq
POST analyze_chinese_pinyin/_search
{
  "query": {
    "match": {
      "name.pinyin": "njscjdq"
    }
  }
}
#返回结果
"hits" : [
      {
        "_source" : {
          "name" : "南京市长江大桥"
        }
      }
    ]
#通过 nan 查询
POST analyze_chinese_pinyin/_search
{
  "query": {
    "match": {
      "name.pinyin": "nan"
    }
  }
}
#返回结果
"hits" : [
      {
        "_source" : {
          "name" : "南京市长江大桥"
        }
      }
    ]

因为 南京长江大桥 经过 pinyin_analyzer 分词器分词后,包含 nan 和 njscjdq 所以都能匹配查询到记录

 

Smart Chinese Analysis

 

参考:https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-smartcn.html


Smart Chinese Analysis 插件将 Lucene 的智能中文分析模块集成到 Elasticsearch 中,

提供了中文或中英文混合文本的分析器。该分析器使用概率知识来找到简体中文文本的最佳分词。文本首先被分解成句子,然后每个句子被分割成单词。

 

此插件必须在每个节点上安装且需要重启才生效,此插件提供了 smartcn 分析器、smartcn_tokenizer tokenizer 等。

 

/bin/elasticsearch-plugin install analysis-smartcn
-> Installing analysis-smartcn
-> Downloading analysis-smartcn from elastic
[=================================================] 100%   
-> Installed analysis-smartcn

同样执行查看已安装插件的列表


./bin/elasticsearch-plugin list
analysis-smartcn
ik
pinyin

安装成功后,需要重启 ES 以便插件生效


POST _analyze
{
  "analyzer": "smartcn",
  "text":"南京市长江大桥"
}
#返回结果
{
  "tokens" : [
    {
      "token" : "南京市",
    },
    {
      "token" : "长江",
    },
    {
      "token" : "大桥",
    }
  ]
}

hanlp 中文分词器

 

安装插件:

 

./bin/elasticsearch-plugin install https://github.com/KennFalcon/elasticsearch-analysis-hanlp/releases/download/v7.10.0/elasticsearch-analysis-hanlp-7.10.0.zip

安装后查看插件安装情况,安装成功后也同样需要重启 ES


./bin/elasticsearch-plugin list
analysis-hanlp
analysis-smartcn
ik
pinyin
GET _analyze
{
  "text": "南京市长江大桥",
  "tokenizer": "hanlp"
}
#返回结果
{
  "tokens" : [
    {
      "token" : "南京市",
    },
    {
      "token" : "长江大桥",
    }
  ]
}

小结

 

通过以上比较,没有哪一种分词器能处理各种不同的场景需求,在实际业务开发中,要根据不同的业务场景、不同的字段设置不同的分词器,以满足实际业务的需要。

 

创作人简介:

李增胜,Elasticsearch 认证工程师、PMP 项目管理认证,现就职于汇通达网络股份有限公司,任产业交易平台交易域技术经理,从事微服务架构、搜索架构方向开发与管理工作。技术关注电商、产业互联网等领域。

博客:https://www.jianshu.com/u/59dceda66b57 

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
设计模式 负载均衡 网络协议
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
【分布式技术专题】「分布式技术架构」实践见真知,手把手教你如何实现一个属于自己的RPC框架(架构技术引导篇)
800 0
|
5月前
|
openCL C++ 异构计算
DirectX·DLL修复工具,msvc*.dll、vcruntime*.dll、mfc140u.dll、xlive.dll等问题修复
金舟DirectX.DLL一键修复工具,全面解决因DLL文件缺失导致的游戏崩溃、软件报错等问题,支持Win7至Win11系统。提供一键扫描、系统DLL修复、游戏组件修复、运行库与注册表修复等功能,操作简便,高效精准,有效提升系统稳定性。
258 0
|
10月前
|
人工智能 自然语言处理 程序员
通义灵码内置 DeepSeek V3 和 R1 满血版 671B模型,免费不限量,免部署!
近期,通义灵码能力再升级全新上线模型选择功能,支持基于百炼的 DeepSeek-V3 和 DeepSeek-R1 满血版671B模型,用户可以在 VSCode 和 JetBrains 里搜索并下载最新通义灵码插件,在输入框里选择模型,即可轻松切换模型。
|
人工智能 NoSQL atlas
生成式AI入门必读:基本概念、数据挑战与解决方案
许多企业正在选择MongoDB Atlas。其原生向量搜索功能,加上统一的 API 和灵活的文档模型,对于寻求通过 RAG 方法提取专有数据来增强 LLM 的企业来说,是一个有吸引力的选择。
3930 4
|
前端开发 开发者
【前端大揭秘】CSS盒子模型的爱恨情仇:一场关于标准与IE模型的精彩对决!
【8月更文挑战第26天】本文深入探讨CSS中的两大盒子模型——标准盒模型与IE盒模型。通过理论解析与实例代码,清晰展示了两种模型下元素尺寸的构成方式及其应用场景。标准盒模型适合精确控制内容区尺寸,而IE盒模型在处理固定宽度元素时更为直观。掌握这些知识将帮助前端开发者在实际项目中做出更优的设计决策,提升网页布局的质量与美观性。
289 1
Error:java: 错误: 不支持发行版本 5,请使用6或更高版本
Error:java: 错误: 不支持发行版本 5,请使用6或更高版本
|
负载均衡 监控 网络虚拟化
华为配置DHCP Snooping防止DHCP Server仿冒者攻击示例
企业有三台FTP服务器Server1、Server2和Server3,且这三台服务器的硬件性能顺次降低,Server1性能是Server2的两倍、Server2性能是Server3的两倍。通过配置负载均衡,让这三台服务器联合对外提供FTP服务,且三台服务器承载业务的多少与服务器硬件性能的高低匹配。通过配置健康检测实时监控这三台服务器是否可达。
293 0
|
C++
[Qt5&VS] VS编译生成Qt的ui_头文件
[Qt5&VS] VS编译生成Qt的ui_头文件
988 0

热门文章

最新文章