中文分词器 IK

本章内容概述

1、中文分词器IK插件介绍
2、Linux环境安装中文分词器IK插件
3、自定义扩展分词器文件
4、elasticsearch文档映射概述

1、中文分词器IK插件介绍

1.1 分词器简介

	在对文档(Document)中的内容进行索引前, 需要对文档的内容使用分析对象(分词器)进行分词.
	分词器:从一串文本中切分出来一个个的词条,并对每个词条进行标准化。
		
		包含三部分: 
		
			character filter: 分词之前的预处理,过滤掉HTML标签,特殊符号转换等;
			
			tokenizer: 分词
			
			token filter: 标准化,比如大小写转换,同义词转换等
	
	分词的目的是为了索引, 索引的目的是为了搜索.
	
		分词的过程是 先分词, 再过滤:

		分词: 将Document中Field域的值切分成一个一个的单词. 具体的切分方法(算法)由具体使用的分词器内部实现.

		过滤: 去除标点符号,去除停用词(的、是、is、the、a等), 词的大写转为小写.
	
	分词流程图:

在这里插入图片描述

	停用词说明:
	停用词是指为了节省存储空间和提高搜索效率, 搜索引擎在索引内容或处理搜索请求时会自动忽略的字词, 这些字或词被称为"stop
words". 如语气助词、副词、介词、连接词等, 通常自身没有明确的含义,只有放在一个上下文语句中才有意义(如:的、在、啊, is、a等).

	例如:
	​	原始文档内容: Lucene is a Java full-text search engine
	​	分析以后的词: lucene java full text search engine

1.2 ES分词器介绍

	因为Elasticsearch中默认的标准分词器分词器对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉子。因此引入中文分词器
-es-ik插件。

	es内置种分词器,他们分别是、standard analyzer、simple analyzer、whitespace analyzer、language analyzer。所以如果
是中文还要程序员自动手动安装中文分词器。

	假设有如下一段话:

		Set the shape to semi-transparent by calling set_trans(5)
	
	standard analyzer:(默认的)他会将词汇单元转换为小写形式,并去除停用词标点符号,支持中文采用的方法是单字切分。
	
		结果是 set, the, shape, to, semi, transparent, by, calling, set_trans, 5(默认的是standard)
	
	simple analyzer:首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式,该分析器会出掉数字类型的字符。
	
		结果是 set, the, shape, to, semi, transparent, by, calling, set, trans

	whitespace analyzer:仅仅是去除空格,对字符没有lowcase化,不支持中文;并且不对生成的词汇单元进行任何标准化处理。
	
		结果是 Set, the, shape, to, semi-transparent, by, calling, set_trans(5)

	language analyzer:特定的语言的分词器,不支持中文

1.3 演示ES传统分词器

	通过Postman访问如下地址:http://192.168.34.64:9200/_analyze

在这里插入图片描述

	分词结果:
{
    "tokens": [
        {
            "token": "奥",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<IDEOGRAPHIC>",
            "position": 0
        },
        {
            "token": "迪",
            "start_offset": 1,
            "end_offset": 2,
            "type": "<IDEOGRAPHIC>",
            "position": 1
        },
        {
            "token": "a4l",
            "start_offset": 2,
            "end_offset": 5,
            "type": "<ALPHANUM>",
            "position": 2
        }
    ]
}

1.4 IK分词器介绍

	IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。
	
	从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本。最初,它是以开源项目Lucene为应用主体的,结合词典分词和文法
分析算法的中文分词组件。新版本的IKAnalyzer3.0则发展为 面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认
优化实现。

	采用了特有的“正向迭代最细粒度切分算法“,具有60万字/秒的高速处理能力。
	
	采用了多子处理器分析模式,支持:英文字母(IP地址、Email、URL)、数字(日期,常用中文数量词,罗马数字,科学计数法),中
文词汇(姓名、地名处理)等分词处理。

	对中英联合支持不是很好,在这方面的处理比较麻烦.需再做一次查询,同时是支持个人词条的优化的词典存储,更小的内存占用。
	
	支持用户词典扩展定义。
	
	针对Lucene全文检索优化的查询分析器IKQueryParser;采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索
的命中率。

2、Linux环境安装中文分词器IK插件

2.1 下载及安装

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

	注意: es-ik分词插件版本一定要和es安装的版本对应

在这里插入图片描述

	第一步:下载es的IK插件[比如:elasticsearch-analysis-ik-6.4.3.zip]命名改为ik,然后解压
	
	第二步: 上传到/usr/local/elasticsearch-6.4.3/plugins

在这里插入图片描述

	第三步: 重启elasticsearch即可

2.2 演示IK分词器

在这里插入图片描述

	分词结果:
{
    "tokens": [
        {
            "token": "奥迪",
            "start_offset": 0,
            "end_offset": 2,
            "type": "CN_WORD",
            "position": 0
        },
        {
            "token": "a4l",
            "start_offset": 2,
            "end_offset": 5,
            "type": "LETTER",
            "position": 1
        }
    ]
}
	注:IK分词器默认有一些热词,但是不包含所有,我们可以自定义分词器文件

在这里插入图片描述

3、自定义扩展分词器文件

	1、在/usr/local/elasticsearch-6.4.3/plugins/ik/config目录下创建custom文件夹
		
		mkdir custom
	
	2、进入custom目录,然后创建new_word.dic文件
	
		touch new_word.dic
	
	3、编辑new_word.dic文件,然后加入新的热词
	
		vim new_word.dic
		
		盘它
		硬核
		老表
		王者荣耀
		洪荒之力
		马云
		一带一路
	
	4、配置文件引入新的自定义热词文件
	
		vi IKAnalyzer.cfg.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uuur9CuJ-1619165360388)(images/77_引入自定义热词.png)]

	5、重启elasticsearch
	
		先杀进程,再重启

4、elasticsearch文档映射概述

	已经把ElasticSearch的核心概念和关系数据库做了一个对比,索引(index)相当于数据库,类型(type)相当于数据表,映射
(Mapping)相当于数据表的表结构。ElasticSearch中的映射(Mapping)用来定义一个文档,可以定义所包含的字段以及字段的类型、分
词器及属性等等。

	文档映射就是给文档中的字段指定字段类型、分词器。
	
	使用Kibana 运行GET /newcapecedu/user/_mapping
	
	运行结果:
{
  "newcapecedu": {
    "mappings": {
      "user": {
        "properties": {
          "age": {
            "type": "long"
          },
          "car": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "sex": {
            "type": "long"
          }
        }
      }
    }
  }
}
	由此得出结论,ElasticSearch的默认数据类型:数值类型都是long,字符串类型都是text

4.1 文档映射分类

动态映射:
	我们知道,在关系数据库中,需要事先创建数据库,然后在该数据库实例下创建数据表,然后才能在该数据表中插入数据。而
ElasticSearch中不需要事先定义映射(Mapping),文档写入ElasticSearch时,会根据文档字段自动识别类型,这种机制称之为动态映
射。

静态映射:
	在ElasticSearch中也可以事先定义好映射,包含文档的各个字段及其类型等,这种方式称之为静态映射。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Elasticsearch中安装中文分词IK,请按照以下步骤操作: 1.确保您的Elasticsearch版本与IK分词版本兼容。您可以在IK分词的GitHub页面上查看兼容性信息。 2.下载IK分词插件。您可以在IK分词的GitHub页面上找到最新版本的插件。 3.将IK分词插件安装到Elasticsearch中。您可以使用以下命令将插件安装到Elasticsearch中: ``` sudo bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v{版本号}/elasticsearch-analysis-ik-{版本号}.zip ``` 请将{版本号}替换为您要安装的IK分词的版本号。例如,如果您要安装版本7.5.1的IK分词,则应使用以下命令: ``` sudo bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.1/elasticsearch-analysis-ik-7.5.1.zip ``` 4.安装完成后,重启Elasticsearch以使IK分词生效: ``` sudo systemctl restart elasticsearch ``` 5.现在您可以在Elasticsearch索引中使用中文分词IK了。您可以使用以下代码段在索引映射中配置IK分词: ``` "analysis": { "analyzer": { "ik_max_word": { "tokenizer": "ik_max_word" }, "ik_smart": { "tokenizer": "ik_smart" } }, "tokenizer": { "ik_max_word": { "type": "ik_max_word" }, "ik_smart": { "type": "ik_smart" } } } ``` 在这个示例中,我们为两个分词ik_max_word和ik_smart定义了令牌。您可以根据需要添加其他分词和令牌
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JTZ001

你的鼓励是我创作的最大动力?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值