ElasticSearch系列——分词器

news/2024/7/7 6:41:21 标签: elasticsearch, java, 搜索引擎

ElasticSearch系列——分词器

  • 分词器
    • 分词和分词器
    • 分词器的组成
      • 分词顺序
      • 构成数量
    • ES中的分词器
      • 测试分词器
      • 指定分词器
    • IK分词器(中文分词)
      • 测试使用IK分词器
    • IK分词器自定义扩展词和停用词IK支持自定义扩展词典和停用词典
      • 1. 修改xml文件
      • 2.创建扩展词典文件
      • 3.编写扩展词典
      • 4.重启ES
      • 5.测试扩展词

分词器

分词和分词器

Analysis∶文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词
Analysis是通过Analyzer来实现的。分词就是将文档通过Analyzer分成一个一个的Term,每一个Term都指向包含这个Term的文档。

分词器的组成

  1. character filters(字符过滤器) : 在文本进行过滤前需要先进行预先处理
  2. tokenizers(分词器) : 对词句进行响应的分词
  3. token filter(token过滤器) : 将切分的单词进行加工,如大小写转化,去除介词等

在ES中默认会使用标准分词器standardAnalyer,其中英语会进行单词分词,中文则是单字分词

分词顺序

character filter ===> tokenizers ===> token filter

构成数量

character filter(大于等于0) ===> tokenizers(至少有1个) ===> token filter(大于等于0)

ES中的分词器

  1. Standard Analyzer : 默认分词器,小写处理
  2. Simple Analyzer-按照单词切分(符号被过滤),小写处理,中文按照空格进行分词
  3. Stop Analyzer -小写处理,停用词过滤(the,a,is)
  4. Whitespace Analyzer-按照空格切分,不转小写
  5. Keyword Analyzer-不分词,直接将输入当作输出

测试分词器

其中将standard修改为你要测试的即可

java"># 分词器
POST /_analyze
{
  "analyzer": "standard",
  "text": "你好我是张三 i am very happy"
}

指定分词器

分词器需要在指定映射的时候进行设置

java">#设置分词器
PUT /analy
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text",
        "analyzer": "standard"
      }
    }
  }
}

IK分词器(中文分词)

https://github.com/medcl/elasticsearch-analysis-ik
在这里插入图片描述
需要我们注意的是IK分词词需要和你的ES版本相同
下载完后解压缩放入ES的/plugins目录下
在这里插入图片描述然后我们重启一下

测试使用IK分词器

ik分词器叫做ik_smartik_max_word他们俩在文本的拆分力度上有所不同,后者更加细致

java"># IK分词器
POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "你好我是张三 i am very happy"
}

这里可以看到对中文的分词已经出来了
在这里插入图片描述

IK分词器自定义扩展词和停用词IK支持自定义扩展词典和停用词典

  • 扩展词典:就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典。
  • 停用词典:就是有些词是关键词,但是出于业务场景不想使用这些关键词被检索到,可以将这些词放入停用词典。

我们可以直接去config/IKAnalyzer.cfg.xml文件中进行定义,你问我怎么知道的?人家README里写的

在这里插入图片描述
在这里插入图片描述

1. 修改xml文件

我们在扩展词典的配置中设置我们扩展词典的文件叫做self_ext.dic,这样我们就配置好了扩展词典的位置
在这里插入图片描述

2.创建扩展词典文件

由于我们现在只是配置了扩展词典的名字,但是实际上我们还没有这个词典,所以我们要对应创建出来

在这里插入图片描述

3.编写扩展词典

如下我们编辑self_ext.dic文件,这里注意扩展词只能每行写一个
我这里设置了张三,李四,王五作为扩展词
在这里插入图片描述

4.重启ES

5.测试扩展词

java">POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "你好我是张三李四王五 i am very happy"
}

当然停用词也是一样
但是推荐大家直接使用定义好的扩展词和停用词

java"><?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">extra_main.dic</entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">extra_stopword.dic</entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

在这里插入图片描述


http://www.niftyadmin.cn/n/1717010.html

相关文章

ElasticSearch系列——Elasticsearch Java API Client

ElasticSearch系列——Elasticsearch Java API ClientElasticsearch Java API Client官方地址特点需求核心三大组成包和命名空间QuickStart1.导入依赖2.开启连接3.关闭连接完整代码JsonIgnore注解JsonData类API使用开启连接关闭连接查询所有索引查询某个索引创建索引删除指定索…

varchar(100)可以存多少中文字符

具体还是要看版本的 4.0版本以下&#xff0c;varchar(100)&#xff0c;指的是100字节&#xff0c;如果存放UTF8汉字时&#xff0c;只能存33个&#xff08;每个汉字3字节&#xff09; 5.0版本以上&#xff0c;varchar(100)&#xff0c;指的是100字符&#xff0c;无论存放的是数…

Zookeeper系列——概述

Zookeeper系列——概述Zookeeper官方文档模型结构模型的特点节点的类型持久节点(PERSISTENT)持久顺序节点(PERSISTENT_SEQUENTIAL)临时节点(EPHEMERAL)临时顺序节点(EPHEMERAL_SEQUENTIAL)安装Zookeeper启动进入容器连接zookeeper的cli配置文件&#xff08;zoo_sample.cfg&…

Zookeeper系列——节点监听机制,JAVA API

Zookeeper系列——节点监听机制,JAVA API节点监听机制监测类型设置监听监听节点目录监听节点数据JAVA APIQuickStart1.导入依赖2.测试连接3.关闭完整代码方法创建节点获取节点数据信息删除节点查看节点下的子节点查看节点状态修改节点数据监听节点数据变化&#xff08;永久监听…

微服务与中间件系列——GateWay整合Swagger3增强Knife4j

微服务与中间件系列——GateWay整合Swagger3增强Knife4jGateWay整合Swagger3增强Knife4j&#xff08;easy模式&#xff09;目的服务端1.导入依赖2.编写配置类3.yaml配置GateWay网关1.文档枚举2.SwaggerProvider3.yaml配置结果增强版服务端1.增加配置参数类2.修改配置类3.修改ya…

SpringData实现Mongodb的CRUD:MongoTemplate框架方法

SpringData实现Mongodb的CRUD&#xff1a;MongoTemplate框架 MongoTemplate实现了java代码与mongodb数据库之间的连接&#xff0c;是现场安全的。 MongoDB database 相当于MySQL中的数据库 collection 相当于 table field 相当于column 一.创建MongoTemplate实例。 1.java co…

用nginx的反向代理机制解决前端跨域问题

1.定义 跨域是指a页面想获取b页面资源&#xff0c;如果a、b页面的协议、域名、端口、子域名不同&#xff0c;所进行的访问行动都是跨域的&#xff0c;而浏览器为了安全问题一般都限制了跨域访问&#xff0c;也就是不允许跨域请求资源。注意&#xff1a;跨域限制访问&#xff0c…

Java四舍五入保留1位小数、2位小数...

Java四舍五入保留1位小数的方法&#xff1a; import java.math.BigDecimal;public class Test {public static void main(String[] args) {double data 3.02;//利用字符串格式化的方式实现四舍五入,保留1位小数String result1 String.format("%.1f",data);//1代表…