一、 analysis与analyzer

analysis:

  文本分析,是将全文本转换为一系列单词的过程,也叫分词。analysis是通过analyzer(分词器)来实现的,可以使用Elasticearch内置的分词器,也可以自己去定制一些分词器。除了在数据写入时将词条进行转换,那么在查询的时候也需要使用相同的分析器对语句进行分析。

analyzer(分词器):

由三部分组成:

  1. Character Filter:将文本中html标签剔除掉。
  2. Tokenizer:按照规则进行分词,在英文中按照空格分词
  3. 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 内置分词器使用示例
  1. Standard Analyzer
GET _analyze
{"analyzer": "standard","text": "2 Running quick brown-foxes leap over lazy dog in the summer evening"
}
  1. 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分词相关推荐

  1. elasticsearch分词练习、自定义分词器练习

    elasticsearch分词练习.自定义分词器练习 分词练习 自定义分词器 分词练习 准备数据 post metric_zabbix/log {"@message":" ...

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

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

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

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

  4. ElastIcSearch分词器

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

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

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

  6. 掌握 analyze API,一举搞定 Elasticsearch 分词难题

    2019独角兽企业重金招聘Python工程师标准>>> 初次接触 Elasticsearch 的同学经常会遇到分词相关的难题,比如如下这些场景: 为什么明明有包含搜索关键词的文档,但 ...

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

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

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

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

  9. elasticsearch分词聚合查询demo

    2019独角兽企业重金招聘Python工程师标准>>> 我们在通过elasticsearch查询text类型的字段时,我们使用aggs进行聚合某个text类型field.这时elas ...

  10. 使用HanLP增强Elasticsearch分词功能

    hanlp-ext 插件源码地址:http://git.oschina.net/hualongdata/hanlp-ext 或 https://github.com/hualongdata/hanlp ...

最新文章

  1. 美图秀秀web开发文档
  2. 电子商城实录------项目目录的结构搭建及其说明3
  3. 北理工 管理系统计算机仿真作业,20秋北理工《CADCAM原理与应用》--模拟3-答案 更…...
  4. 快成物流科技 x mPaaS | 小程序容器加持下的技术架构“提质增效”
  5. linux系统基本操作命令
  6. docker下gitlab安装配置使用(完整版)
  7. 前端学习(1612):oracle简介
  8. java中FileInputStream和OutputStream解析
  9. 解决XML配置文件The markup in the document following the root element must be well-formed报错
  10. 【kafka】支持超高并发的kafka网络设计
  11. Flutter进阶第6篇: 获取设备信息 以及 使用高德Api获取地理位置
  12. JavaWeb:Redis
  13. 关于Spring中的context:annotation-config/配置
  14. mysql怎么把两个表格的数据合并成一行_mysql中将多行数据合并成一行数据
  15. windows 2003 server 企业英文版 序列号
  16. 第一部分day5 文件操作
  17. ubuntu:VIM使用
  18. (二进制枚举+思维)1625 夹克爷发红包
  19. 腾讯视频开启硬件加速
  20. 博尔赫斯-诗中的经典语段

热门文章

  1. “天河一号”掌门人:这一刻中国人等了20多年
  2. 微信小程序 使用特殊字体的两种方法
  3. Python中使用Type hinting 和 annotations
  4. geogebra与matlab,浅谈Geogebra在大学数学教学中的应用
  5. php网页的制作,用PHP制作静态网站的模板框架
  6. GAT解读graph attention network
  7. solidwork 侵权 证据_“SEI WOO SW及图”商标注册案例分析
  8. 工程力学(10)—轴向拉伸与压缩二
  9. 数据分析---pandas(一)
  10. AsyncTaskLoader1 自定义AsyncTaskLoader使用实例:面包师