分词器

分词就是将一段文本按照一定的规则切分成以一个一个的关键字的过程

简介

ElasticSearch的分词器(Analyzer)一般由三种组件构成:

  1. character filter 字符过滤器:

    在一段文本分词之前,先进行预处理,比如说最常见的就是 【过滤html标签】,<span>hello<span> --> helloI & you --> I and you

  2. tokenizers 分词器

    默认情况下,英文分词根据空格将单词分开;中文分词按单字隔开,也可以采用机器学习算法来分词

  3. Token filters Token过滤器

    将切分的单词进行加工,大小写转换,去掉停用词(例如“a”、“and”、“the”等等 ),加入同义词(例如同义词像“jump”和“leap”)

⚠️三者的顺序:

  • 三者顺序: Character Filters—>Tokenizer—>Token Filter
  • **三者个数:**Character Filters(0个或多个) + Tokenizer + Token Filters(0个或多个)

分类

  • Standard Analyzer - 默认分词器,英文按单词词切分,并小写处理
  • Simple Analyzer - 按照单词切分(符号被过滤), 小写处理
  • Stop Analyzer - 小写处理,停用词过滤(the,a,is)
  • Whitespace Analyzer - 按照空格切分,不转小写
  • Keyword Analyzer - 不分词,直接将输入当作输出

创建索引时设置分词器

PUT /索引名
{"settings": {},"mappings": {"properties": {"title":{"type": "text","analyzer": "standard" //显示指定分词器}}}
}

内置分词器

标准分词器

  • 英文按照单词分词,统一转为小写,过滤标点符号;
  • 中文单字分词
POST /_analyze
{"analyzer": "standard","text": "this is a , good Man 中华人民共和国"
}

Simple分词器

  • 英文按照单词分词 英文统一转为小写 去掉符号
  • 中文按照标点符号(逗号、句号、包括空格等等)进行分词
POST /_analyze
{"analyzer": "simple","text": "this is a , good Man 中华人民共和国"
}

Whitespace 分词器

中文和英文都按照空格分词 ,英文不会转为小写 , 不去掉标点符号

POST /_analyze
{"analyzer": "whitespace","text": "this is a , good Man"
}

中文分词器

在ES中支持中文分词器非常多 如 smartCNIK 等,推荐的就是 IK分词器

安装IK

  • 安装方式不止一种,我这里选择的是在线安装
  • 必须要注意的是ik分词器的版本必须必须和ES强一致

1.进入容器内部

docker exec -it 容器Id bash

2.在线下载

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.14.0/elasticsearch-analysis-ik-7.14.0.zip

3.退出容器并重启

//退出
exit
//重启
docker restart 容器id

4.进入容器查看插件目录

docker exec -it 容器Id bashcd plugins/

IK使用

IK分词器有两种粒度划分:

  • ik_smart: 会做最粗粒度的拆分
  • ik_max_word: 会将文本做最细粒度的拆分
POST /_analyze
{"text":"中华民族共和国国歌","analyzer":"ik_smart"
}{"tokens" : [{"token" : "中华民族","start_offset" : 0,"end_offset" : 4,"type" : "CN_WORD","position" : 0},{"token" : "共和国","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 1},{"token" : "国歌","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 2}]
}
POST /_analyze
{"text":"中华民族共和国国歌","analyzer":"ik_max_word"
}{"tokens" : [{"token" : "中华民族","start_offset" : 0,"end_offset" : 4,"type" : "CN_WORD","position" : 0},{"token" : "中华","start_offset" : 0,"end_offset" : 2,"type" : "CN_WORD","position" : 1},{"token" : "民族","start_offset" : 2,"end_offset" : 4,"type" : "CN_WORD","position" : 2},{"token" : "共和国","start_offset" : 4,"end_offset" : 7,"type" : "CN_WORD","position" : 3},{"token" : "共和","start_offset" : 4,"end_offset" : 6,"type" : "CN_WORD","position" : 4},{"token" : "国","start_offset" : 6,"end_offset" : 7,"type" : "CN_CHAR","position" : 5},{"token" : "国歌","start_offset" : 7,"end_offset" : 9,"type" : "CN_WORD","position" : 6}]
}

扩展词和关键词

  • 扩展词:就是有些词并不是关键词,但是也希望被ES用来作为检索的关键词,可以将这些词加入扩展词典
  • 停用词:就是有些关键词,我们并不想让他被检索到,可以放入停用词典中

设置扩展词典和停用词典在es容器中的config/analysis-ik目录下的IKAnalyzer.cfg.xml

1. 修改vim 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">ext_dict.dic</entry><!--用户可以在这里配置自己的扩展停止词字典--><entry key="ext_stopwords">ext_stopword.dic</entry></properties>2. 在es容器中`config/analysis-ik`目录下中创建ext_dict.dic文件   编码一定要为UTF-8才能生效vim ext_dict.dic 加入扩展词即可3. 在es容器中`config/analysis-ik`目录中创建ext_stopword.dic文件 vim ext_stopword.dic 加入停用词即可4.重启es生效

es本身也提供了一些常用的扩展词典和停用词典可以直接使用

ElasticSearch 分词器相关推荐

  1. elasticsearch分词器词库热更新三种方案

    文章目录 一.本地文件读取方式 二.远程扩展热更新 IK 分词 三.重写ik源码连接mysql 一.本地文件读取方式 首先进入elasticsearch目录的plugins目录下,查看目录结构 2.进 ...

  2. 3. ElasticSearch分词器和聚合,数据的丰富和去重

    ElasticSearch分词器和聚合,数据的丰富和去重 1. analyzer 1.1. 什么是analysis? 1.2. 如何定义一个定制的分析器 1.3. 中文分词器 2. Aggregati ...

  3. ElastIcSearch分词器

    ElastIcSearch分词器 Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer).Analys ...

  4. 2、Elasticsearch分词器简介与使用(一)

    一.分词器的概念 1.Analysis Phase 在文档(Document)被添加到反向索引(inverted index)之前,Elasticsearch 对文档正文执行的过程称为分析阶段(Ana ...

  5. es过滤html标签,Elasticsearch 分词器

    在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本.在原始文本中的开始和结束偏移量.以及数据类型等 ...

  6. Elasticsearch——分词器对String的作用

    更多内容参考:Elasticsearch学习总结 关于String类型--分词与不分词 在Elasticsearch中String是最基本的数据类型,如果不是数字或者标准格式的日期等这种很明显的类型, ...

  7. 一、ElasticSearch分词器概念

    java学习讨论群:725562382 1.Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词.Analysis是通过 ...

  8. elasticsearch 分词器器读写分词

    elasticsearch 默认分词器为 standard分词器,即:不指定分词器默认使用standard分词器 修改默认分词器: PUT index {"settings":{& ...

  9. ElasticSearch——手写一个ElasticSearch分词器(附源码)

    1. 分词器插件 ElasticSearch提供了对文本内容进行分词的插件系统,对于不同的语言的文字分词器,规则一般是不一样的,而ElasticSearch提供的插件机制可以很好的集成各语种的分词器. ...

  10. elasticsearch分词器Jcseg安装手册

    Jcseg是什么? Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言 ...

最新文章

  1. 深度学习和普通机器学习之间有何区别?
  2. 通过ID在JavaScript对象数组中查找对象
  3. mysql 视图操作和存储过程
  4. PX4/Pixhawk---uORB深入理解和应用
  5. 服装企业信息化计算机化的趋势,服装企业信息化建设的研究.pdf
  6. 赞!苏州大学95后硕士一作发《Nature》!
  7. 三位数流水码的生成(000·····009··00A····00Z····ZZZ)
  8. 03.swoole学习笔记--web服务器
  9. 这几天的学习进度总结
  10. 非常好的关于android安全的博客
  11. SPSS 协方差分析(图文+数据集)【SPSS 020期】
  12. 在consul中删除服务
  13. 7450清零_联想M7450F打印机加粉清零方法
  14. C语言知识点——函数参数
  15. JPA学习笔记之接口JpaRepository 和 JpaSpecificationExecutor的简单使用
  16. 只要干不死,就往死里干
  17. YEDROUDJ-NET: AN EFFICIENT CNN FOR SPATIAL STEGANALYSIS【Yedroudj-Net:一个高效的空间隐写分析CNN】
  18. noip模拟赛 斐波那契
  19. 【电子书+代码】Sklearn,Keras与Tensorflow机器学习实用指南
  20. H5-脱机API-Application Cache-1.1

热门文章

  1. go语言学习:结构体
  2. Qt Qml实现国际化
  3. 用Word输入汉字偏旁部首 比想像中容易(转)
  4. PreferenceManager 0.1.5发布
  5. 苏宁官方活动一分钱也包邮,满10.01减10,包邮,只花0.01
  6. 鄂尔多斯房价崩盘阵痛:老总2年都在催账还账
  7. PHP 常见设计模式——工厂模式
  8. ASP.net GridView控件(删除/更新功能)
  9. Linux RHEL 7.9网卡配置bond0(主备模式)
  10. 阴阳师项目网站首页(动态网页)原生HTML+CSS+Javascript