首页 > 其他分享 >ElasticSearch-集成ik分词器

ElasticSearch-集成ik分词器

时间:2023-11-10 12:04:32浏览次数:27  
标签:ik start token ElasticSearch 分词器 offset type 分词




目录

  • 背景介绍
  • 版本选择
  • 优势说明
  • 集成过程
  • 1.下载安装包
  • 2.解压安装包
  • 3.重启ElasticSearch服务
  • 3.1通过ps -ef | grep elastic查看正在启动的es进程号
  • 3.2使用kill -9 xxx 杀死进程
  • 3.3使用 ./elasticsearch 启动es服务
  • 分词测试
  • 细粒度分词方式
  • 分词请求
  • 分词结果
  • 粗粒度分词方式
  • 分词请求
  • 分词结果
  • 项目中
  • 代码
  • 结果
  • 总结提升


背景介绍

  我们在项目中集成了ElasticSearch服务之后,需要对内容进行分词处理。这时候就需要用到分词器。其实ElasticSearch服务自身也会带有分词器。ElasticSearch服务自带的分词器是单个字进行分的。在我们的业务当中要求对整个词进行拆分。这时候就用到了ik分词器。ik分词器是词库分词的分词方式。当然根据我们的业务不同还可以选择其他的分词器。

版本选择

ElasticSearch-集成ik分词器_elasticsearch

优势说明

Elasticsearch的IK分词器是一种流行的中文分词器,它有以下几个优势:

  • 「 中文分词 」:IK分词器专门用于处理中文文本,能够将连续的中文字符序列切分成有意义的词语。它支持细粒度和智能切分两种分词模式,可以根据需求选择合适的模式。
  • 「 高效性能 」:IK分词器在分词速度和内存占用方面具有较高的性能。它采用了基于词典的分词算法和N-gram模型,能够快速准确地进行分词处理。
  • 「支持扩展词典 」:IK分词器允许用户自定义扩展词典,可以添加特定的词汇,如专业术语、品牌名等,以提高分词的准确性和覆盖范围。
  • 「支持拼音分词」:IK分词器还提供了拼音分词功能,可以将中文文本转换成拼音,并进行分词处理。这对于拼音搜索和拼音排序等场景非常有用。
  • 「多语言支持」:除了中文,IK分词器还支持其他语言的分词处理,如英文、日文等。它可以根据不同的语言特点进行相应的分词处理,提高搜索的准确性和效果。

集成过程

1.下载安装包

ik地址:https://github.com/medcl/elasticsearch-analysis-ik/releases

ElasticSearch-集成ik分词器_大数据_02

2.解压安装包

解压并重命名为IK 将整个文件夹上传到es 中的 plugins 目录中

unzip elasticsearch-analysis-ik-7.6.1.zip

ElasticSearch-集成ik分词器_elasticsearch_03

3.重启ElasticSearch服务

3.1通过ps -ef | grep elastic查看正在启动的es进程号

3.2使用kill -9 xxx 杀死进程

3.3使用 ./elasticsearch 启动es服务

ElasticSearch-集成ik分词器_分词器_04

分词测试

细粒度分词方式

分词请求

POST test002/_analyze?pretty=true

{
"text":"我们是软件工程师",
"tokenizer":"ik_max_word"
}

分词结果

{
    "tokens": [
        {
            "token": "我们",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "是",
            "start_offset": 2,
            "end_offset": 3,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "软件工程",
            "start_offset": 3,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "软件",
            "start_offset": 3,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 3
        },
        {
            "token": "工程师",
            "start_offset": 5,
            "end_offset": 8,
            "type": "CN_WORD",
            "position": 4
        },
        {
            "token": "工程",
            "start_offset": 5,
            "end_offset": 7,
            "type": "CN_WORD",
            "position": 5
        },
        {
            "token": "师",
            "start_offset": 7,
            "end_offset": 8,
            "type": "CN_CHAR",
            "position": 6
        }
    ]
}

粗粒度分词方式

分词请求

POST test002/_analyze?pretty=true

{
"text":"我们是软件工程师",
"tokenizer":"ik_max_word"
}

分词结果

这一次得到了分词的效果:
```json
{
    "tokens": [
        {
            "token": "我们",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "是",
            "start_offset": 2,
            "end_offset": 3,
            "type": "CN_CHAR",
            "position": 1
        },
        {
            "token": "软件",
            "start_offset": 3,
            "end_offset": 5,
            "type": "CN_WORD",
            "position": 2
        },
        {
            "token": "工程师",
            "start_offset": 5,
            "end_offset": 8,
            "type": "CN_WORD",
            "position": 3
        }
    ]
}

项目中

代码

@Autowired
    private RestHighLevelClient client;

    public void test() throws IOException {
        AnalyzeRequest analyzeRequest = AnalyzeRequest.withGlobalAnalyzer("ik_smart", "武梓龙来写CSDN博客来了");
        AnalyzeResponse analyze = client.indices().analyze(analyzeRequest, RequestOptions.DEFAULT);
        for (AnalyzeResponse.AnalyzeToken token : analyze.getTokens()) {
            System.out.println(token.getTerm());
        }
    }

  示例是将一段话进行分词操作,其中withGlobalAnalyzer方法的第一个参数是指定分词器ik_smart分词器(当然也可以使用其他分词器,根据业务的需求进行调整) 是es服务中安装了IK的插件实现的,如果不安装IK分词器的插件ik_smart分词器是无法使用的。第二个参数就是我们分词的内容了。

结果

ElasticSearch-集成ik分词器_jenkins_05

总结提升

  IK分词器在中文分词方面具有较好的准确性和性能,支持自定义词典和拼音分词,适用于各种中文搜索和分析场景。它是Elasticsearch中常用的中文分词器之一。


此文章对你有用的话记得留言+点赞+收藏哦

标签:ik,start,token,ElasticSearch,分词器,offset,type,分词
From: https://blog.51cto.com/u_16102679/8294893

相关文章

  • 开发常用的 3种 API 监控报告- Eolink Apikit
    API监控报告是一种监测API异常的工具。在API管理中,查看API异常监控的监控报告,是EolinkApikit常用的功能。EolinkApikit的监控报告有3种:单接口监控报告流程监控报告项目监控报告1、单接口监控报告单接口监控报告通常关注单个应用程序接口或系统的性能和可用性......
  • Dalvik虚拟机是在Linux内核上面运行的吗?为什么能执行安卓APK程序?
    Dalvik虚拟机确实是在Linux内核之上运行的。它是安卓系统的关键组件,专门设计来执行APK文件中的代码。这里是它的工作原理和一个生活中的例子:工作原理:基于Linux内核:安卓系统基于Linux内核,这为安卓设备提供了底层功能,如硬件抽象、网络通信、安全机制等。Dalvik虚拟机:在Linux......
  • 安卓系统执行APK程序为什么需要ART或者Dalvik虚拟,原理是什么
    安卓系统执行APK程序需要ART(AndroidRuntime)或者以前的Dalvik虚拟机,主要是因为安卓应用大多数是用Java语言编写的,而Java是一种需要虚拟机来执行的语言。下面我会分别解释虚拟机的原理和为什么需要它们,以及提供一个生活中的例子来帮助理解。 ###虚拟机的原理: 1......
  • 现在的安卓12或者是安卓13用的是什么虚拟机ART还是Dalvik?举个比喻
    Android5.0(Lollipop)及以后的版本使用的是ART(AndroidRuntime)虚拟机,而不是早期版本中使用的Dalvik虚拟机。从Android4.4(KitKat)开始,ART就作为一个实验性的特性出现,并在随后的版本中取代了Dalvik。 要用一个生活中的例子来比喻的话,我们可以把虚拟机想象成一家咖啡店的咖啡机。......
  • ART还是Dalvik虚拟的原理是什么,跟安卓运行APK有啥关系
    ART(AndroidRuntime)和Dalvik都是Android操作系统中的应用程序运行环境。它们都是虚拟机,用于在Android设备上执行应用程序代码。APK(AndroidPackage)是Android应用程序的打包格式,包含了应用程序的所有文件,包括应用程序代码、资源和元数据。Dalvik虚拟机:原理:Dalvik是一种基于寄存......
  • Dalvik/ART虚拟机是什么,跟安卓运行APK有啥关系,举个常用例子
    Dalvik和ART(AndroidRuntime)都是安卓操作系统中的应用程序虚拟机,它们是Android设备上运行APK文件的关键组成部分。Dalvik虚拟机概念:Dalvik是Android最初使用的虚拟机,它专为Android系统设计,主要用于执行APK中的DalvikExecutable(.dex)文件。工作原理:Dalvik通过使用即时编译(JIT)将......
  • elasticsearch在Java中查询指定列的方法
     背景ES在查询时如果数量太多,而每行记录包含的字段很多,那就会导致超出ES的查询上线,默认是100MB,但是很多场景下我们只需要返回特定的字段即可,那么如何操作呢。主要代码@AutowiredprivateRestHighLevelClientclient;publicList<Map<String,Object>>search(Stringin......
  • oracle判断是否数字 Oracle提供了regexp_like函数 正则表达式匹配
    oracle判断是否数字Oracle提供了regexp_like函数正则表达式匹配在Oracle数据库中,判断是否为数字可以使用正则表达式或者使用自带的内置函数来实现。方法一:使用正则表达式Oracle提供了regexp_like函数,它使用正则表达式来判断一个字符串是否符合指定的模式。我们可以使用这个函......
  • 世界上最全面的elasticsearch学习之路,祝你早日学成归来
    开胃菜,核心知识篇elasticsearch安装和使用elasticsearch索引curd,mapping映射,queryDSLelasticsearch分词器characterfilter,tokenizer,tokenfilter elasticsearch聚合查询Elasticsearch-直观了解查询(term、match、match_phrase和query_string)区别ES搜索(con......
  • 软件测试|MySQL LIKE:深入了解模糊查询
    简介在数据库查询中,模糊查询是一种强大的技术,可以用来搜索与指定模式匹配的数据。MySQL数据库提供了一个灵活而强大的LIKE操作符,使得模糊查询变得简单和高效。本文将详细介绍MySQL中的LIKE操作符以及它的用法,并通过示例演示其功能。基本语法MySQL中的LIKE操作符用于模糊匹配数......