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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 带你读《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

 

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
9月前
|
自然语言处理 API 索引
ElasticSearch自定义pinyin和ik分词库
ElasticSearch自定义pinyin和ik分词库
87 0
|
15天前
|
自然语言处理 数据可视化 Linux
ElasticSearch安装ik分词器_使用_自定义词典
ElasticSearch安装ik分词器_使用_自定义词典
16 1
|
自然语言处理 Docker 容器
elasticsearch-analysis-ik分词器下载与安装
elasticsearch-analysis-ik分词器下载与安装
1743 0
elasticsearch-analysis-ik分词器下载与安装
|
1月前
|
自然语言处理
Elasticsearch+IK+pinyin自定义分词器
Elasticsearch+IK+pinyin自定义分词器
41 0
|
11月前
|
自然语言处理 算法 Docker
ElasticSearch学习笔记(四) IK分词
前面了解了Elasticsearch中对索引及文档的基本操作。今天了解Es中非常重要的一个概念:分词。在 Elasticsearch 中,中文分词的首选分词器是 ik 分词器。在本文中,我们将介绍如何使用 ik 分词器将商品名称(name)字段进行分词,并详细介绍分词过程及结果等。
381 2
|
JSON 自然语言处理 数据格式
ElasticSearch用ik_analyzer分词器出现报错
ElasticSearch用ik_analyzer分词器出现报错
174 0
|
自然语言处理 项目管理 微服务
带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(下)
带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(下)
118 0
|
自然语言处理
带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(上)
带你读《Elastic Stack 实战手册》之36:——3.4.2.17.5.中文分词器/ IK分词器/ pinyin分词器(上)
121 0
|
自然语言处理 安全 关系型数据库
白话Elasticsearch30-IK中文分词之热更新IK词库
白话Elasticsearch30-IK中文分词之热更新IK词库
143 0

热门文章

最新文章