带你读《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/1229402


IK 中文分词器

 

插件下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

(注意必须下载和使用的 Elasticsearch 匹配的版本)

 

1执行插件安装命令:


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

2重启 ES 即生效

 

IK 分词器包含:ik_smart 以及 ik_max_word 2种分词器,都可以用在 索引和查询阶段。

创建一个索引,里面包含2个字段:

 

l - 字段 max_word_content 使用 ik_max_word 分词器处理;

l - 字段 smart_content 采用 ik_smart 分词器处理;

 

分别对比下执行结果:


#创建索引
PUT /analyze_chinese
{
  "mappings": {
    "properties": {
      "max_word_content": {
        "type": "text",
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_max_word"
      },
      "smart_content": {
        "type": "text",
        "analyzer": "ik_smart",
        "search_analyzer": "ik_smart"
      }
    }
  }
}
#添加测试数据
POST analyze_chinese/_bulk
{"index":{"_id":1}}
{"max_word_content":"南京市长江大桥","smart_content":"我是南京市民"}
# ik_max_word 查询分析器解析结果
POST _analyze
{
  "text": "南京市长江大桥",
  "analyzer": "ik_max_word"
}
#返回结果
{
  "tokens" : [
    {
      "token" : "南京市",
    },
    {
      "token" : "南京",
    },
    {
      "token" : "市长",
    },
    {
      "token" : "长江大桥",
    },
    {
      "token" : "长江",
    },
    {
      "token" : "大桥",
    }
  ]
}
#ik_smart
POST _analyze
{
  "text": "南京市长江大桥",
  "analyzer": "ik_smart"
}
#返回结果
{
  "tokens" : [
    {
      "token" : "南京市",
    },
    {
      "token" : "长江大桥",
    }
  ]
}

通过以上分析,ik_smart 显然分词的颗粒度较粗,而 ik_max_word 颗粒度较细 

 

通过 DSL 来验证查询


POST analyze_chinese/_search
{
  "query": {
    "match": {
      "smart_content": "南京市"
    }
  }
}
#返回结果
"hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }

未匹配到记录,因为“我是南京市民”经过分词处理后并不包含“南京市”的 token,那通过“南京”搜索呢?

 

POST analyze_chinese/_search
{
  "query": {
    "match": {
      "smart_content": "南京"
    }
  }
}
#返回结果
"hits" : [
      {
        "_source" : {
          "max_word_content" : "南京市长江大桥",
          "smart_content" : "我是南京市民"
        }
      }
    ]

经过 ik_max_word 分词处理器处理之后的 max_word_content 字段效果呢?


POST analyze_chinese/_search
{
  "query": {
"match": {
      "max_word_content": "南京"
    }
  }
}
#返回结果
"hits" : [
      {
        "_source" : {
          "max_word_content" : "南京市长江大桥",
          "smart_content" : "我是南京市民"
        }
      }
    ]
#使用 南京市 查询
POST analyze_chinese/_search
{
  "query": {
    "match": {
      "max_word_content": "南京市"
    }
  }
}
#返回结果
"hits" : [
      {
        "_source" : {
          "max_word_content" : "南京市长江大桥",
          "smart_content" : "我是南京市民"
        }
      }
    ]

可以看到,由于“南京市长江大桥”经过 ik_max_word 分词器处理后,包含“南京市”

token,所以都可以查询到。

 

IK 分词器总结:

 

l ik_max_word 分词颗粒度小,查全率高,满足业务场景更丰富

l ik_smart 分词器颗粒度较粗,满足查准要求高的业务


《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/1229399

 

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
缓存 监控 安全
JUC第二十讲:深入理解 Java 中的线程池
JUC第二十讲:深入理解 Java 中的线程池
303 0
|
5月前
|
Kubernetes 负载均衡 应用服务中间件
Kubernetes Ingress与OpenShift Route的差异性比较
总结而言,Kubernetes Ingress和OpenShift Route都是解决如何将内部服务暴露给外部网络的方案。它们之间的主要差异在于Route是为OpenShift定制的,提供了一些方便的特性,而Ingress则是一个通用的Kubernetes功能,具有更广泛的适用性和社区支持。根据环境的不同和需求的具体情况,在实际操作中选择最合适的方案来展开服务的外部访问和路由安排。
133 22
|
机器学习/深度学习 运维 监控
云计算时代的运维革新:从传统到现代化的转变
【8月更文挑战第21天】本文旨在探讨云计算技术如何重塑了传统的运维模式,引领运维工作走向自动化、智能化和集成化的新阶段。我们将从云计算带来的挑战入手,深入分析现代运维的核心技术与实践,并展望其未来发展趋势。文章不包含代码示例,而是聚焦于理念和技术的演变以及它们对运维领域的影响。
|
测试技术 数据库 Android开发
大学生心理健康APP的设计与实现
大学生心理健康APP的设计与实现
1033 0
|
机器学习/深度学习 人工智能 自然语言处理
手把手带你5分钟搭建企业级AI问答知识库
【8月更文挑战第3天】手把手带你5分钟搭建企业级AI问答知识库
1372 4
|
分布式计算 关系型数据库 MySQL
MySQL超时参数优化与DataX高效数据同步实践
通过合理设置MySQL的超时参数,可以有效地提升数据库的稳定性和性能。而DataX作为一种高效的数据同步工具,可以帮助企业轻松实现不同数据源之间的数据迁移。无论是优化MySQL参数还是使用DataX进行数据同步,都需要根据具体的应用场景来进行细致的配置和测试,以达到最佳效果。
|
存储 前端开发 JavaScript
从零开始学习React Native开发
【2月更文挑战第1天】React Native是一种跨平台的移动应用程序框架,可以使用JavaScript和React来构建Android和iOS应用程序。本文将带您从零开始学习React Native开发,涵盖了基础知识、组件、样式、布局、API等方面。
|
NoSQL PHP Apache
LAMP+Redis详解(二)——实战配置
LAMP+Redis详解(二)——实战配置
138 1
|
存储 弹性计算 Cloud Native
魔搭中文开源模型社区:模型即服务-魔搭・平台工程框架介绍(下)
魔搭中文开源模型社区:模型即服务-魔搭・平台工程框架介绍
1251 1

热门文章

最新文章