ES之道:IK分词器的魔法般变身

news2024/11/26 20:35:40

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

ES之道:IK分词器的魔法般变身

    • 前言
    • IK分词器简介
    • IK分词器原理
    • 创建索引和配置IK分词器
    • 实战(docker搭建的Es)
      • 下载ik插件
      • 创建一个ik分词器的索引
      • 如果希望将原来的索引覆盖
        • 重新索引数据
        • 删除旧索引重新命名新索引
      • 报错解决

前言

在数据的世界里,搜索就像是一位智慧的导航员,它能够帮助我们在海量信息中找到需要的答案。而Elasticsearch,就像是这位导航员的得力助手,它通过强大的文本处理能力,为我们提供了一个高效的搜索引擎。而IK分词器,则是Elasticsearch中的一枚利器,它能够帮助我们实现中文文本的精确分词和搜索。今天,就让我们一起来揭开IK分词器的神秘面纱,探索它在Elasticsearch中的魔法般变身吧!

IK分词器简介

IK 分词器是一个针对中文文本的开源分词器,特别适用于中文搜索引擎和文本分析领域。它的作用是将中文文本按照一定的规则进行切分,将连续的字符序列划分为具有语义的词语,从而实现中文文本的分词处理。

重要性:

  1. 中文分词的基础工具: 在中文文本处理领域,分词是非常基础且重要的工作。IK 分词器提供了一个高效准确的分词工具,为中文文本的处理提供了基础支持。
  2. 提高搜索效果: 在搜索引擎等应用中,分词的质量直接影响搜索结果的准确性和用户体验。使用 IK 分词器可以提高搜索引擎的检索效果,使用户能够更快速准确地找到所需信息。
  3. 支持领域专业词汇: IK 分词器支持用户自定义词典,可以灵活地增加领域专业词汇,提高分词的准确性和适用性。

与其他分词器的区别:

  1. 精准度和速度: IK 分词器在中文文本处理领域具有较高的精准度和速度,能够快速准确地进行分词处理。
  2. 自定义词典支持: IK 分词器支持用户自定义词典,可以灵活增加领域专业词汇,提高分词效果。一些其他分词器也支持自定义词典,但不是所有分词器都具备这个功能。
  3. 开源社区支持: IK 分词器是一个开源项目,有着活跃的开发社区和用户社区,可以获得丰富的技术支持和资源共享。

IK分词器原理

IK 分词器的分词原理基于中文文本的规则和词典匹配,主要包括正向最大匹配和逆向最大匹配两种算法。以下是 IK 分词器的基本工作流程:

  1. 正向最大匹配(Forward Maximum Matching):

    • 正向最大匹配从文本的开头开始,按照最大匹配的原则进行切分。即从当前位置开始,选择最长的词语进行匹配,并将匹配成功的词语作为分词结果。
    • 此过程会在词典中查找匹配的词语,如果找到匹配的词语,则将其作为分词结果;如果没有找到匹配的词语,则缩小匹配窗口,继续查找下一个最长的词语。
    • 分词过程会重复执行,直到处理完整个文本。
  2. 逆向最大匹配(Reverse Maximum Matching):

    • 逆向最大匹配从文本的末尾开始,按照最大匹配的原则进行切分。即从当前位置开始,选择最长的词语进行匹配,并将匹配成功的词语作为分词结果。
    • 此过程同样会在词典中查找匹配的词语,如果找到匹配的词语,则将其作为分词结果;如果没有找到匹配的词语,则缩小匹配窗口,继续查找下一个最长的词语。
    • 分词过程会重复执行,直到处理完整个文本。
  3. 合并分词结果:

    • 正向最大匹配和逆向最大匹配得到的分词结果可能不同,因此需要进行合并。
    • 通常情况下,可以选择分词结果中词数较少的作为最终结果,或者根据一定的评分算法来选择最合适的分词结果。
  4. 处理未登录词:

    • IK 分词器支持用户自定义词典,用户可以添加自己的词汇到词典中。当分词器无法识别某些词语时,会尝试在用户词典中查找匹配的词汇。

总体而言,IK 分词器通过正向最大匹配和逆向最大匹配两种算法来切分中文文本,并结合用户自定义词典进行分词处理,从而实现对中文文本的准确分词。

创建索引和配置IK分词器

在 Elasticsearch 中创建索引并配置 IK 分词器,可以通过以下步骤完成:

  1. 创建索引: 首先,在 Elasticsearch 中创建一个新的索引,可以使用 Elasticsearch 的 REST API 或者 Kibana 工具进行操作。

  2. 配置 IK 分词器: 针对需要进行中文分词的字段,配置相应的 IK 分词器。

下面是一个示例,演示如何使用 Elasticsearch 的 REST API 在创建索引时配置 IK 分词器:

PUT /my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "tokenizer": "ik_max_word", // 使用 IK 分词器 ik_max_word
          "filter": ["my_synonym_filter"] // 可选:添加同义词过滤器
        }
      },
      "filter": {
        "my_synonym_filter": {
          "type": "synonym",
          "synonyms_path": "analysis/synonyms.txt" // 同义词文件路径
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text",
        "analyzer": "my_analyzer" // 使用自定义的 IK 分词器
      }
    }
  }
}

在上面的示例中:

  • 创建了一个名为 my_index 的索引。
  • 在索引的设置中,定义了一个名为 my_analyzer 的分析器,使用 IK 分词器 ik_max_word 进行分词,并且可以选择添加同义词过滤器。
  • 创建了一个 content 字段,并将其配置为使用自定义的 IK 分词器 my_analyzer 进行分词。

常见的 IK 分词器配置示例包括:

  • ik_max_word:最大化地切分词语,适合搜索应用。
  • ik_smart:精准地切分词语,适合索引和分析应用。

根据实际需求,可以选择合适的 IK 分词器进行配置,并根据需要添加额外的分词器设置,如同义词过滤器等。

实战(docker搭建的Es)

下载ik插件

docker搭建的Es如果下载ik分词器插件可以执行以下命令,下面的版本要选择你的es版本

docker exec -it your_elasticsearch_container_name /bin/bash -c "elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.16.3/elasticsearch-analysis-ik-7.16.3.zip"

创建一个ik分词器的索引

curl -XPUT "http://localhost:9200/acowbo_new" -H 'Content-Type: application/json' -d '
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "type": "custom",
          "tokenizer": "standard",
          "filter": ["lowercase"]
        },
        "ik_analyzer": {
          "type": "custom",
          "tokenizer": "ik_smart"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"
      },
      "searchKey": {
        "type": "text",
        "analyzer": "ik_analyzer"
      },
      "searchValue": {
        "type": "text",
        "analyzer": "ik_analyzer"
      },
      "typeName": {
        "type": "text",
        "analyzer": "my_analyzer"
      }
    }
  }
}'

如果希望将原来的索引覆盖

重新索引数据
curl -XPOST "http://localhost:9200/_reindex" -H 'Content-Type: application/json' -d '
{
  "source": {
    "index": "acowbo"
  },
  "dest": {
    "index": "acowbo_new"
  }
}'

删除旧索引重新命名新索引
curl -XDELETE "http://localhost:9200/acowbo"
curl -XPOST "http://localhost:9200/acowbo_new/_alias/acowbo"

报错解决

  1. Can’t update non dynamic settings [[index.analysis.analyzer.my_analyzer.type, index.analysis.analyzer.my_analyzer.filter, index.analysis.analyzer.ik_analyzer.tokenizer, index.analysis.analyzer.my_analyzer.tokenizer, index.analysis.analyzer.ik_analyzer.type]] for open indices

    Elasticsearch不允许直接更新这些非动态设置。
    curl -XPOST "http://localhost:9200/acowbo/_close"
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Eclipse下载安装教程(包含JDK安装)【保姆级教学】【2023.10月最新版】

目录 文章最后附下载链接 第一步:下载Eclipse,并安装 第二步:下载JDK,并安装 第三步:Java运行环境配置 安装Eclipse必须同时安装JDK !!! 文章最后附下载链接 第一步&#xf…

C++——string的使用

string的使用 1. STL2. string2.1 初始化和遍历2.2 容量相关2.3 串的修改2.4 其他接口 1. STL STL全称 standard template libaray——标准模板库,内部包含了很多数据结构和算法,数据结构包括栈,队列,树,链表等&#…

[JAVASE] 类和对象(一)

目录 一.类的基本定义 1.1 类与对象 1.2 类的定义 二. 类的实例化 2.1 创建引用 三. 类中成员的访问 3.1 基本实现 3.2 this引用 四. 构造与初始化 4.1 初始化 4.2 构造方法 五. 总结 一.类的基本定义 1.1 类与对象 类对应着对象 1.2 类的定义 二. 类的实例化 2.1 创建引用…

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

前言 上一篇文章带你实现了Go-Zero和goctl:解锁微服务开发的神器,快速上手指南,本文将继续深入探讨Go-Zero的强大之处,并介绍如何使用goctl工具实现模板定制化,并根据实际项目业务需求进行模板定制化实现。 通过本文…

爬虫学习--1.前导知识

初始爬虫 前言引入 随着大数据时代的来临,网络爬虫在互联网中的地位将越来越重要。互联网中的数据是海量的,如何自动高效地获取互联网中我们感兴趣的信息并为我们所用是一个重要的问题,而爬虫技术就是为了解决这些问题而生的。 我们感兴趣的…

java学习笔记反射机制

2.关于反射的理解 Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何 类的内部信息,并能直接操作任意对象的内部属性及方法。 框架 反射 注解 设计模式。 3.体会反射机制的“动态性” //…

Mybatis之ResultMap

前言 select语句查询得到的结果集是一张二维表,水平方向上看是一个个字段,垂直方向上看是一条条记录。而Java是面向对象的程序设计语言,对象是根据类定义创建的,类之间的引用关 系可以认为是嵌套的结构。在JDBC编程中&#xff0c…

政务服务电子文件归档和电子档案管理系统,帮助组织收、管、存、用一体化

作为数字政府建设的重要抓手,政务服务改革经过多年发展,截至 2022 年底,全国一体化在线政务服务平台实名用户超过10亿人,在政务服务、办件过程中出现了大量需要归档的电子文件,对于电子档案、电子证照的需求愈加强烈。…

Sql Server 2016数据库定时备份

一、 配置备份计划任务 选中“维护计划“--右键--“维护计划向导” 完成

2024 年 数维杯(C题)大学生数学建模挑战赛 | 天然气水合物资源 | 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 CS团队倾注了大量时间和心血,深入挖掘解决方案。通…

1.python爬虫爬取视频网站的视频可下载的源url

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、爬取的源网站二、爬取过程详解1.首先我们需要解析网站的源码,按F12,在Elements下查看网站的源码2.获取视频的页数3.获取每一页所哟视频的…

基于FPGA实现的HDMI TO MIPI扩展显示器方案

FPGA方案,HDMI IN接收原始HDMI 信号,输出显示到LCD 屏上 客户应用:扩展显示器 主要特性: 1.支持2K以下任意分辨率显示 2.支持OSD 叠加多个图层 3.支持MIPI/EDP/LVDS/RGB屏 4.支持放大缩小匹配屏分辨率 5.零延时,输…

从零学算法42

42.接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3…

蚂蚁面试:DDD外部接口调用,应该放在哪一层?

尼恩说在前面: 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: DDD 的外部接口调用,应该放在…

Java方法和数组

方法 Java中的方法就是c语言中的函数。 方法的定义 定义格式如下 修饰符 返回值 方法名([参数列表]){代码块[return 返回值;] } //方括号[]括起来代表可以没有,不是必须有的方法名采用小驼峰命名(就是有多个单词,第一个单词首字母小写其…

阅读送书抽奖?玩转抽奖游戏,js-tool-big-box工具库新上抽奖功能

先讨论一个问题,你做软件工作是为了什么?从高中选专业,就喜欢上了软件开发?还是当初毕业不知道干啥,不喜欢自己的专业,投入软件开发的怀抱?还是干着干着别的,突然觉得互联网行业真不…

前端技术交流群

欢迎来到前端筱园用户交流!这是一个专注于前端编程技术、学习资源和行业动态的讨论平台。在这里,你可以分享经验、提问、回答问题,与其他前端开发者一起学习和成长。 🌟亲爱的朋友们🌟 大家好!感谢你们一直…

《Tam》论文笔记(下)

3 Method 3.1. The Overview of Temporal Adaptive Module 正如我们在第1节中讨论的,视频数据通常表现出由相机运动和速度变化等因素引起的复杂时间动态。因此,我们的目标是通过引入具有视频特定内核的时间自适应模块 (TAM) 来解决这个问题&#xff0c…

一键自动化博客发布工具,用过的人都说好(infoq篇)

infoq的博客发布界面也是非常简洁的。首页就只有基本的标题,内容和封面图片,所以infoq的实现也相对比较简单。 一起来看看吧。 前提条件 前提条件当然是先下载 blog-auto-publishing-tools这个博客自动发布工具,地址如下:https://github.c…

营收如泡沫,利润如刀片,万辰集团万店梦想下的阴影

(作者注:本文建议配乐《泡沫》阅读!) 从“食用菌第一股”转型为“量贩零食第一股”的首个财年,万辰集团新业务发展迅猛。 财报显示,2023年公司量贩零食业务实现营业收入87.59亿元,同比增长1305…