Elasticsearch分词
一、 analysis与analyzer
analysis:
文本分析,是将全文本转换为一系列单词的过程,也叫分词。analysis是通过analyzer(分词器)来实现的,可以使用Elasticearch内置的分词器,也可以自己去定制一些分词器。除了在数据写入时将词条进行转换,那么在查询的时候也需要使用相同的分析器对语句进行分析。
analyzer(分词器):
由三部分组成:
- Character Filter:将文本中html标签剔除掉。
- Tokenizer:按照规则进行分词,在英文中按照空格分词
- Token Filter:将切分的单词进行加工,小写,删除 stopwords(停顿词,a、an、the、is等),增加同义词
1.1 内置的分词器
分词器名称 | 处理过程 |
---|---|
Standard Analyzer | 默认的分词器,按词切分,小写处理 |
Simple Analyzer | 按照非字母切分(符号被过滤),小写处理 |
Stop Analyzer | 小写处理,停用词过滤(the, a, this) |
Whitespace Analyzer | 按照空格切分,不转小写 |
Keyword Analyzer | 不分词,直接将输入当做输出 |
Pattern Analyzer | 正则表达式,默认是\W+(非字符串分隔) |
1.2 内置分词器使用示例
- Standard Analyzer
GET _analyze
{"analyzer": "standard","text": "2 Running quick brown-foxes leap over lazy dog in the summer evening"
}
- Simple Analyzer
GET _analyze
{"analyzer": "simple","text": "2 Running quick brown-foxes leap over lazy dog in the summer evening"
}
…
1.3 中文分词
中文分词在所有搜索引擎中都是一个很大的难点,中文的句子应该是切分成一个个的词,但是一句中文,在不同的上下文,其实是不同的理解,例如以下:
这个苹果,不大好吃/这个苹果,不大,好吃
1.3.1 IK分词器
IK分词器支持自定义词库,支持更新分词字典,地址为https://github.com/medcl/elasticsearch-analysis-ik
安装步骤:
1. 下载zip包,下载路径为:https://github.com/medcl/elasticsearch-analysis-ik/releases2. 在Elasticsearch的plugins目录下创建名为analysis-ik的目录,将下载好的zip包解压在该目录下3. 再dos命令进入Elasticsearch的bin目录下,执行elasticsearch-plugin.bat list即可查看到该插件
IK分词插件对应的分词器有以下几种:
- ik_smart
- ik_max_word
1.3.2 HanLP分词器
安装步骤:
1. 下载zip包,下载路径:<https://pan.baidu.com/s/1mFPNJXgiTPzZeqEjH_zifw#list/path=%2F>,密码i0o72. 在Elasticsearch的plugins目录下创建名为analysis-hanlp目录,将下载好的zip包解压到该目录下3. 下载词库,地址为:https://github.com/hankcs/HanLP/releases4. 将analysis-hanlp目录下的data目录删除掉,然后将词库data-for-1.7.5.zip解压到analysis-hanlp目录下5. 将第二步解压目录下的config文件夹中两个文件hanlp.properties和hanlp-remote.xml拷贝到Elasticsearch安装目录中config目录下analysis-hanlp文件夹中(analysis-hanlp目录需手动自己创建)6. 将课件中hanlp文件夹中提供的六个文件(可自己定义)拷贝到$ES_HOME\plugins\analysis-hanlp\data\dictionary\custom 目录下。
HanLP对应的分词器如下:
- hanlp:默认的
- hanlp_standard:标准分词
- hanlp_index:索引分词
- hanlp_nlp:nlp分词
- hanlp_n_short:N-最短路分词
- hanlp_speed:极速词典分词
1.3.3 pingyin分词器
安装步骤:
1. 下载ZIP包,下载路径为:https://github.com/medcl/elasticsearch-analysis-pinyin/releases2. 在Elasticsearch的plugins目录下创建名为 analysis-pinyin 的目录,将下载好的zip包解压在该目录下.
1.4 中文分词演示
ik_smart
GET _analyze
{"analyzer": "ik_smart","text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]
}
hanlp
GET _analyze
{"analyzer": "hanlp","text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]
}
hanlp_standard
GET _analyze
{"analyzer": "hanlp_standard","text": ["剑桥分析公司多位高管对卧底记者说,他们确保了唐纳德·特朗普在总统大选中获胜"]
}
1.5 分词的实际应用
在如下列举了很多的分词器,那么在实际中该如何使用?
1.5.1 设置mapping
想要使用分词器,先要指定我们想要对哪个字段使用何种,如下所示:
PUT customers
{"mappings": {"properties": {"content": {"type": "text","analyzer": "hanlp_nlp"}}}
}
1.5.2 插入数据
PUT customers/_bulk
{"index":{"_id": 1}}
{"content":"如不能登录,请在百端登录百度首页,点击【登录遇到问题】,进行找回密码操作"}
{"index":{"_id": 2}}
{"content":"网盘客户端访问隐藏空间需要输入密码方可进入。"}
{"index":{"_id": 3}}
{"content":"剑桥的网盘不好用"}
1.5.3 查询
GET customers/_search
{"query": {"match": {"content": "密码"}}
}
1.6 拼音分词器
在查询的过程中我们可能需要使用拼音来进行查询,在中文分词器中我们介绍过pinyin分词器,那么在实际工作中该如何使用呢?
1.6.1 设置settings
PUT /medcl
{"settings" : {"analysis" : {"analyzer" : {"pinyin_analyzer" : {"tokenizer" : "my_pinyin"}},"tokenizer" : {"my_pinyin" : {"type" : "pinyin","keep_separate_first_letter" : false,"keep_full_pinyin" : true,"keep_original" : true,"limit_first_letter_length" : 16,"lowercase" : true,"remove_duplicated_term" : true}}}}
}可用参数:- "keep_separate_first_letter" true,刘德华 -> l,d,h false,刘德华 -> ldh- "keep_full_pinyin" true, 刘德华 -> liu,de,hua- "keep_joined_full_pinyin" true,刘德华 -> liudehau- "keep_original" true,刘德华 -> 刘德华- "limit_first_letter_length" 16, 费拉基米尔伊里奇 -> feilajimieryiliq全拼的长度限制- "lowercase" 转小写- "remove_duplicated_term" true,删除重复的拼音项,刘德华的liu与柳岩的liu,只保留一个
如上所示,我们基于现有的拼音分词器定制了一个名为 pinyin_analyzer 这样一个分词器。可用的参数可以参照:https://github.com/medcl/elasticsearch-analysis-pinyin
1.6.2 设置mapping
PUT medcl/_mapping
{"properties": {"name": {"type": "keyword","fields": {"pinyin": {"type": "text","analyzer": "pinyin_analyzer","boost": 10}}}}
}
1.6.3 数据的插入
POST medcl/_bulk
{"index":{}}
{"name": "刘德华"}
{"index":{}}
{"name": "张学友"}
{"index":{}}
{"name": "四大天王"}
{"index":{}}
{"name": "柳岩"}
{"index":{}}
{"name": "angel baby"}
1.6.4 查询
GET medcl/_search
{"query": {"match": {"name.pinyin": "ldh"}}
}
1.7 中文、拼音混合查找
1.7.1 设置settings
PUT goods
{"settings": {"analysis": {"analyzer": {"hanlp_standard_pinyin":{"type": "custom","tokenizer": "hanlp_standard","filter": ["my_pinyin"]}},"filter": {"my_pinyin": {"type" : "pinyin","keep_separate_first_letter" : false,"keep_full_pinyin" : true,"keep_original" : true,"limit_first_letter_length" : 16,"lowercase" : true,"remove_duplicated_term" : true}}}}
}
1.7.2 mappings设置
PUT goods/_mapping
{"properties": {"content": {"type": "text","analyzer": "hanlp_standard_pinyin"}}
}
1.7.3 添加数据
POST goods/_bulk
{"index":{}}
{"content":"如不能登录,请在百端登录百度首页,点击【登录遇到问题】,进行找回密码操作"}
{"index":{}}
{"content":"网盘客户端访问隐藏空间需要输入密码方可进入。"}
{"index":{}}
{"content":"剑桥的网盘不好用"}
1.7.4 查询
GET goods/_search
{"query": {"match": {"content": "caozuo"}},"highlight": {"pre_tags": "<em>","post_tags": "</em>","fields": {"content": {}}}
}
Elasticsearch分词相关推荐
- elasticsearch分词练习、自定义分词器练习
elasticsearch分词练习.自定义分词器练习 分词练习 自定义分词器 分词练习 准备数据 post metric_zabbix/log {"@message":" ...
- elasticsearch分词器词库热更新三种方案
文章目录 一.本地文件读取方式 二.远程扩展热更新 IK 分词 三.重写ik源码连接mysql 一.本地文件读取方式 首先进入elasticsearch目录的plugins目录下,查看目录结构 2.进 ...
- 3. ElasticSearch分词器和聚合,数据的丰富和去重
ElasticSearch分词器和聚合,数据的丰富和去重 1. analyzer 1.1. 什么是analysis? 1.2. 如何定义一个定制的分析器 1.3. 中文分词器 2. Aggregati ...
- ElastIcSearch分词器
ElastIcSearch分词器 Analysis 和 Analyzer Analysis: 文本分析是把全文本转换一系列单词(term/token)的过程,也叫分词(Analyzer).Analys ...
- 2、Elasticsearch分词器简介与使用(一)
一.分词器的概念 1.Analysis Phase 在文档(Document)被添加到反向索引(inverted index)之前,Elasticsearch 对文档正文执行的过程称为分析阶段(Ana ...
- 掌握 analyze API,一举搞定 Elasticsearch 分词难题
2019独角兽企业重金招聘Python工程师标准>>> 初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 为什么明明有包含搜索关键词的文档,但 ...
- es过滤html标签,Elasticsearch 分词器
在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token)表示在文本字段中出现的词,由词的文本.在原始文本中的开始和结束偏移量.以及数据类型等 ...
- Elasticsearch——分词器对String的作用
更多内容参考:Elasticsearch学习总结 关于String类型--分词与不分词 在Elasticsearch中String是最基本的数据类型,如果不是数字或者标准格式的日期等这种很明显的类型, ...
- elasticsearch分词聚合查询demo
2019独角兽企业重金招聘Python工程师标准>>> 我们在通过elasticsearch查询text类型的字段时,我们使用aggs进行聚合某个text类型field.这时elas ...
- 使用HanLP增强Elasticsearch分词功能
hanlp-ext 插件源码地址:http://git.oschina.net/hualongdata/hanlp-ext 或 https://github.com/hualongdata/hanlp ...
最新文章
- 美图秀秀web开发文档
- 电子商城实录------项目目录的结构搭建及其说明3
- 北理工 管理系统计算机仿真作业,20秋北理工《CADCAM原理与应用》--模拟3-答案 更…...
- 快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”
- linux系统基本操作命令
- docker下gitlab安装配置使用(完整版)
- 前端学习(1612):oracle简介
- java中FileInputStream和OutputStream解析
- 解决XML配置文件The markup in the document following the root element must be well-formed报错
- 【kafka】支持超高并发的kafka网络设计
- Flutter进阶第6篇: 获取设备信息 以及 使用高德Api获取地理位置
- JavaWeb:Redis
- 关于Spring中的context:annotation-config/配置
- mysql怎么把两个表格的数据合并成一行_mysql中将多行数据合并成一行数据
- windows 2003 server 企业英文版 序列号
- 第一部分day5 文件操作
- ubuntu:VIM使用
- (二进制枚举+思维)1625 夹克爷发红包
- 腾讯视频开启硬件加速
- 博尔赫斯-诗中的经典语段
热门文章
- “天河一号”掌门人:这一刻中国人等了20多年
- 微信小程序 使用特殊字体的两种方法
- Python中使用Type hinting 和 annotations
- geogebra与matlab,浅谈Geogebra在大学数学教学中的应用
- php网页的制作,用PHP制作静态网站的模板框架
- GAT解读graph attention network
- solidwork 侵权 证据_“SEI WOO SW及图”商标注册案例分析
- 工程力学(10)—轴向拉伸与压缩二
- 数据分析---pandas(一)
- AsyncTaskLoader1 自定义AsyncTaskLoader使用实例:面包师