Elasticsearch ik分词器的ik_mart和ik_max_word模式

概述

Elaticsearch在保存数据时,会根据创建索引的mapping映射对于每个字段的数据进行分词。同时在查询索引数据的时候会对于检索词进行分词,然后再检索。因此分词对于数据库的查询效率和相关度的关系是非常大的。

分词器的作用

ES在创建索引和查询索引的时候都需要需要用到分词器进行分词,而分词器的作用:

分词器的作用是把一段文本中的词按照一定规则进行切分

由于检索和分词都需要用到分词器,因此务必保证使用的一致性,否则由于分词规则的不同导致检索不出来结果
因为分词器对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的。
也就是说不同的分词器分词的规则是不同的!

分词器的操作分析

标准分词器模式

使用kibana执行dsl语句测试

#测试分词器
POST /_analyze
{
  "analyzer": "standard",
  "text":"学习Elasticsearch数据库"
}

分词结果:

{
  "tokens" : [
    {
      "token" : "学",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "<IDEOGRAPHIC>",
      "position" : 0
    },
    {
      "token" : "习",
      "start_offset" : 1,
      "end_offset" : 2,
      "type" : "<IDEOGRAPHIC>",
      "position" : 1
    },
    {
      "token" : "elasticsearch",
      "start_offset" : 2,
      "end_offset" : 15,
      "type" : "<ALPHANUM>",
      "position" : 2
    },
    {
      "token" : "数",
      "start_offset" : 15,
      "end_offset" : 16,
      "type" : "<IDEOGRAPHIC>",
      "position" : 3
    },
    {
      "token" : "据",
      "start_offset" : 16,
      "end_offset" : 17,
      "type" : "<IDEOGRAPHIC>",
      "position" : 4
    },
    {
      "token" : "库",
      "start_offset" : 17,
      "end_offset" : 18,
      "type" : "<IDEOGRAPHIC>",
      "position" : 5
    }
  ]
}

由结果可见,标准分词器模式对于中文的分词并不友好,因此需要使用ik分词器

ik分词器

ik_smart:最少切分(最粗粒度的切分模式)

#测试分词器
POST /_analyze
{
  "analyzer": "ik_smart",
  "text":"学习Elasticsearch数据库"
}

分词结果:
在这里插入图片描述

ik_max_word:最多切分(最细粒度的切分模式)

 #测试分词器
POST /_analyze
{
  "analyzer": "ik_max_word",
  "text":"学习Elasticsearch数据库"
}

分词结果:
在这里插入图片描述

分词的扩展

在数据库安装目录,/plugins/elasticsearch-analysis-ik-7.8.0/config/目录下存在配置文件IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

新增扩展字典

首先查看未扩展之前的检索
在这里插入图片描述
在配置文件同目录下新增扩展词典:myext.dict
在这里插入图片描述
在这里插入图片描述
重启es数据库,可以看到加载了自定义的扩展分词
在这里插入图片描述
重新执行分词语句,可以看到作为一个‘奥利给’词语被切分
在这里插入图片描述

新增扩展停止词字典

停止词的概念:

有些词在文本中出现的频率非常高,但是对文本所携带的信息基本不产生影响。文本经过分词之后,停止词通常被过滤掉,不会被进行索引。
在检索的时候,用户的查询中如果含有停止词,检索系统在分词处理会将其过滤掉。

例如:
英文停用词:a、an、the、of等
中文停用词:的、了、着、是、标点符号等

停止词的作用

排除停用词可以加快建立索引的速度,减小索引库文件的大小,并且还可以提高查询的准确度。

停止词的操作测试

在这里插入图片描述
在配置文件同级目录下增加停止词配置
在这里插入图片描述
在这里插入图片描述
重启es数据库,可以看到加载了自定义的扩展分词
在这里插入图片描述
切分中已经去除了停止词
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

徐州蔡徐坤

又要到饭了兄弟们

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

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

打赏作者

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

抵扣说明:

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

余额充值