分词器

分词器 接受一个字符串作为输入,将 这个字符串拆分成独立的词或 语汇单元(token) (可能会丢弃一些标点符号等字符),然后输出一个 语汇单元流(token stream) 。

一个analyzer分词器包含三个部分:

  • character filter:分词之前的预处理,过滤掉HTML标签、特殊符号转换等。
  • tokenizer:分词
  • token filter:标准化

ES内置分词器

事实上,ElasticSearch中有一些内置分词器:

  • Standard 分词器:默认分词器,会将词汇单元转成小写形式并且去除停用词和标点符号,支持中文采用的方法为单字切分。
  • Simple 分词器:首先会通过非字母字符来分割文本信息,然后将词汇单元统一为小写形式。该分词器会去除掉数字类型的字符。
  • Whitespace 分词器:仅仅是去除空格,对字符没有lowcase化,不支持中文;并且不对生成的词汇单元进行其他标准化处理。
  • Stop 分词器:相比Simple Analyzer多了去除请用词处理,停用词指语气助词等修饰性词语,如the, an, 的, 这等
  • Keyword 分词器:不分词,直接将输入作为一个单词输出
  • Pattern 分词器:通过正则表达式自定义分隔符,默认是\W+,即非字词的符号作为分隔符
  • Language 分词器:特定语言的分词器,不支持中文。如 english 、french 和 spanish 分析器。

应该说,standard 分词器是大多数西方语言分词的一个合理的起点。 事实上,它构成了大多数特定语言分析器的基础,如 english 、french 和 spanish 分析器。 它也支持亚洲语言,只是有些缺陷(=.=To Be Honest , 你输入任何中文,都会被拆成一个一个的文字来分词,简直不要太糟糕),你可以考虑通过 ICU 插件的方式使用 icu_analyzer 进行中文分词更合理。

附录有更详细的分词器列表。

分词API

作为REST的搜索引擎,ES可以直接 POST http://localhost:9200/_analyze 来查询分词的情况。

{"text": "I'm going to Guangzhou museum","analyzer": "standard"
}
curl -X POST \http://localhost:9200/_analyze \-d '{"text": "I'\''m going to Guangzhou museum","analyzer": "standard"
}'

curl或者postman都可以:


ICU 分析器插件

Elasticsearch的 ICU 分析器插件 使用 国际化组件 Unicode (ICU) 函数库提供丰富的处理 Unicode 工具。 这些包含对处理亚洲语言特别有用的 icu_分词器 ,还有大量对除英语外其他语言进行正确匹配和排序所必须的分词过滤器。

ICU 插件是处理英语之外语言的必需工具,非常推荐你安装并使用它,不幸的是,因为是基于额外的 ICU 函数库, 不同版本的ICU插件可能并不兼容之前的版本,当更新插件的时候,你需要重新索引你的数据(=。=根据你的ES版本替换后面的版本号,例如我是6.8.1,则用6.8.1,你用7.3.0就用7.3.0,类推)。

#自动安装
sudo bin/elasticsearch-plugin install analysis-icu
#手动安装
(自行下载)https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-6.8.1.zip
(Linux)sudo bin/elasticsearch-plugin install file:///path/to/plugin.zip
(Windows)bin\ elasticsearch-plugin.bat install file:///C:\Users\Administrator\Downloads\analysis-icu-6.8.1.zip
#安装成功
[=================================================] 100%??
-> Installed analysis-icu

ICU分词

{"text": "基于ELK打造强大的日志收集分析系统(springboot2+logback+logstash+elasticsearch+kibana)","analyzer": "icu_analyzer"
}
{"tokens": [{"token": "基于","start_offset": 0,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 0},{"token": "elk","start_offset": 2,"end_offset": 5,"type": "<ALPHANUM>","position": 1},{"token": "打造","start_offset": 5,"end_offset": 7,"type": "<IDEOGRAPHIC>","position": 2},{"token": "强大","start_offset": 7,"end_offset": 9,"type": "<IDEOGRAPHIC>","position": 3},{"token": "的","start_offset": 9,"end_offset": 10,"type": "<IDEOGRAPHIC>","position": 4},{"token": "日志","start_offset": 10,"end_offset": 12,"type": "<IDEOGRAPHIC>","position": 5},{"token": "收集","start_offset": 12,"end_offset": 14,"type": "<IDEOGRAPHIC>","position": 6},{"token": "分析","start_offset": 14,"end_offset": 16,"type": "<IDEOGRAPHIC>","position": 7},{"token": "系统","start_offset": 16,"end_offset": 18,"type": "<IDEOGRAPHIC>","position": 8},{"token": "springboot2","start_offset": 19,"end_offset": 30,"type": "<ALPHANUM>","position": 9},{"token": "logback","start_offset": 31,"end_offset": 38,"type": "<ALPHANUM>","position": 10},{"token": "logstash","start_offset": 39,"end_offset": 47,"type": "<ALPHANUM>","position": 11},{"token": "elasticsearch","start_offset": 48,"end_offset": 61,"type": "<ALPHANUM>","position": 12},{"token": "kibana","start_offset": 62,"end_offset": 68,"type": "<ALPHANUM>","position": 13}]
}

验证设想

{"text": "北京大学与解放军总医院第一附属医院妇产科","analyzer": "icu_analyzer"
}

之前有个设想:北京大学,分词器会分一个北京一个大学和一个北京大学
结果发现:太天真了,根本没有北京大学这个分词。。。。。。
请看下文结果

{"tokens": [{"token": "北京","start_offset": 0,"end_offset": 2,"type": "<IDEOGRAPHIC>","position": 0},{"token": "大学","start_offset": 2,"end_offset": 4,"type": "<IDEOGRAPHIC>","position": 1},{"token": "与","start_offset": 4,"end_offset": 5,"type": "<IDEOGRAPHIC>","position": 2},{"token": "解放","start_offset": 5,"end_offset": 7,"type": "<IDEOGRAPHIC>","position": 3},{"token": "军","start_offset": 7,"end_offset": 8,"type": "<IDEOGRAPHIC>","position": 4},{"token": "总","start_offset": 8,"end_offset": 9,"type": "<IDEOGRAPHIC>","position": 5},{"token": "医院","start_offset": 9,"end_offset": 11,"type": "<IDEOGRAPHIC>","position": 6},{"token": "第一","start_offset": 11,"end_offset": 13,"type": "<IDEOGRAPHIC>","position": 7},{"token": "附属","start_offset": 13,"end_offset": 15,"type": "<IDEOGRAPHIC>","position": 8},{"token": "医院","start_offset": 15,"end_offset": 17,"type": "<IDEOGRAPHIC>","position": 9},{"token": "妇产科","start_offset": 17,"end_offset": 20,"type": "<IDEOGRAPHIC>","position": 10}]
}

Smart Chinese Analyzer Plugins

中文分词器,听说Elastic Stack 8.0会自带,但是还没release,静候佳音吧。

Smart Chinese Analysis插件将Lucene的Smart Chinese分析模块集成到elasticsearch中。

提供中文或混合中英文本的分析器。 该分析器使用概率知识来查找简体中文文本的最佳分词。 首先将文本分成句子,然后将每个句子分割成单词。

sudo bin/elasticsearch-plugin install analysis-smartcn

ElasticSearch之ICU分词器相关推荐

  1. Elasticsearch:ICU 分词器介绍

    ICU Analysis 插件是一组将 Lucene ICU 模块集成到 Elasticsearch 中的库. 本质上,ICU 的目的是增加对 Unicode 和全球化的支持,以提供对亚洲语言更好的文 ...

  2. Elasticsearch之Analyzer分词器介绍

    Elasticsearch之Analyzer分词器介绍 Analysis Analyzer的组成 ES中内置的分词器 Analyzer的使用 几种分词器介绍 Standard Analyzer Sim ...

  3. 2021年大数据ELK(八):Elasticsearch安装IK分词器插件

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 安装IK分词器 一.下载Elasticsearch IK分词器 ...

  4. Elasticsearch之中文分词器插件es-ik(博主推荐)

    前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch之中文分词器 Elasti ...

  5. Elasticsearch之中文分词器

    前提 什么是倒排索引? Elasticsearch之分词器的作用 Elasticsearch之分词器的工作流程 Elasticsearch之停用词 Elasticsearch的中文分词器 1.单字分词 ...

  6. 04.ElasticSearch之IK分词器的安装与使用

    ElasticSearch之IK分词器的安装与使用 前言 安装 离线安装 在线安装 ik分词器测试 扩展(停用)词(典) 测试数据 概念 配置词典 1.修改配置文件 2.新建词典 3.自定义内容 4. ...

  7. ElasticSearch:为中文分词器增加对英文的支持(让中文分词器可以处理中英文混合文档)(转)

    本文地址,需转载请注明出处: http://blog.csdn.net/hereiskxm/article/details/47441911 当我们使用中文分词器的时候,其实也希望它能够支持对于英文的 ...

  8. docker、docker-compose 下安装elasticsearch、IK分词器

    docker.docker-compose 下安装elasticsearch.IK分词器 文章目录 docker.docker-compose 下安装elasticsearch.IK分词器 1.整体版 ...

  9. elasticsearch安装ik分词器

    elasticsearch安装ik分词器 1. 修改docker-compose.yml文件,对es目录下的plugins文件夹进行文件映射 version: "2.2" volu ...

最新文章

  1. seaborn可视化多水平分类变量分组箱图boxplot并自定义多个箱体的顺序(Manually Order Boxes in Boxplot with Seaborn)
  2. matlab 图像分割 提取人像_几种典型的图像处理技术(分类 目标提取 目标跟踪 语义分割 实例分割)...
  3. 普通的旧CLR对象与数据传输对象
  4. python 服务端渲染_客户端渲染和服务器渲染的区别
  5. vue中 this.$set的用法
  6. 如何打造一个小而精的电商网站架构?
  7. 没有PARAMETER ID,想 call TRANSACTION
  8. Web安全——正方教务系统自主选课非正常退课解决方案(危险操作,仅用于学习)
  9. Matlab 【应用】【1】用Matlab找一组模拟波形的极值(含极大值、极小值、最大值)并在图中画出来
  10. python拼图游戏编码_教你用Python自制拼图小游戏,轻松搞定熊孩子
  11. Verilog代码实例化的简单理解(以38译码器为例)
  12. This Product is covered by one or more of the folloWing patents
  13. 国内外知名的21个Logo设计工具
  14. 机器人大冒险(能否到达终点)
  15. fluent使用DPM模型计算出的颗粒沉积(trap)数据(.dpm格式)后处理python实现
  16. ET之快递测试法学习感悟20140922
  17. krnln.fnr和shell.fne_电脑开机显示failedtoloadkernllibrary什么意思啊
  18. 前端常说的优化之图片优化
  19. java中什么是空指针异常_JAVA中的空指针异常如何处理?
  20. 自定义Behavior的艺术探索-仿UC浏览器主页

热门文章

  1. 王者荣耀2022五一劳动节返场皮肤有哪些 返厂皮肤介绍
  2. RestTemplate 发送http post请求
  3. 小鸟云:5种CC攻击防御方法
  4. L1-076 降价提醒机器人
  5. openwrt 硬件
  6. mariadb踩过的坑之排序分组
  7. 【Linux】NFS服务器搭建配置挂载
  8. JForum论坛配置
  9. 学计算机的一直对画画感兴趣,小学生电脑绘画比赛总结.doc
  10. C++ STL编译报错:error: error passing 'const' as 'this' argument