elasticsearch教程--Analysis篇-分词器

目录

  • 概述

  • 环境准备

  • 什么是分词

  • 分词目的
  • 分词器
  • 彩蛋

概述

    关于elasticsearch教程写了关于安装安装踩坑记两篇博文, 现在就来写点项目中使用中文分词器的历程。

本文旨在分局项目es中使用中文分词器的心得,对es分词器做初步讲解,如有错误和不当之处,欢迎批评指正。

环境准备

  1. 全新最小化安装的centos 7.5
  2. elasticsearch 6.4.0

什么是分词

    分词这个词表明的意思已经很明了,就是将一句话分成多个词语, 比如: “我爱祖国” 会被拆分为 【我,爱,祖国】。

那么为什么需要拆分成这样呢? 这就要从全文检索数据存储结构说起,深入的存储结构我就不深入讲解了,因为我也不知道具体的[/奸笑]。正式开始,es内部基于apache lucene做了进一步的封装,如果直接使用lucene做全文检索,相信用过的前辈们顿感头顶凉意,有了es封装,小辈们至少可以省一瓶霸王洗发水。

分词的目的

    es可以从千万级别数据量快速检索出对应的文档,要归功于一个叫倒排索引的家伙, 通过词汇找到对应的文档,既然有倒排索引,那么同样出现了一个正向索引的东东,下面就来认识一下倒排索引

正向索引

    先来说说正向索引,在搜索引擎中,每个文档(每条数据)都会被分词,得到每个词出现的频率以及位置,示例:

fcfea5aa9f14b7d210dce5ee33fe76fcff5.jpg

当搜索 词1 时,搜索引擎就要将所有的文档遍历获取到在哪些文档中存在, 类似mysql做查询, 通过文档去找词,当数据量千万级别以上并且多个词进行搜索,想想都好可怕啊!!!

倒排索引

    倒排索引反向正向索引,通过词去找文档,通过倒排索引文件,建立词与文档的关系。如下图所示:

19e921ea7940e8858558dfd50d06d093514.jpg

分词器

    官方解释: 分词是将文本(如任何电子邮件的正文或者一篇文章)转换为标记或术语的过程,这些标记或术语被添加到倒排索引中便于搜索。分析由分析器执行,它可以是内置的分析器,也可以是定义每个索引的自定义分析器。

    言而总之,分词器作用就是将文档(文章内容等)进行分词,将词语和文档的关系存入倒排索引便于搜索,举例:

elasticsearch内置的英文分词器效果如下:

"The QUICK brown foxes jumped over the lazy dog!"

英文分词器会将以上语句分成不同的词汇。它将小写每个词汇,除去众多的停用词(the)和减少词汇复意(foxes → fox, jumped → jump, lazy → lazi)。最后,在倒排索引中加入以下词汇:

[ quick, brown, fox, jump, over, lazi, dog ]

elasticsearch内置分词器有standard analyzer,simple analyzer,whitespace analyzer,stop analyzer,Keyword analyzer,pattern analyzer,language analyzers,fingerprint analyzer这8种

注意: 这些内置的分词器对中文支持效果都很差

standard analyzer

    默认分词器,它提供了基于语法的分词(基于Unicode文本分割算法,如Unicode® Standard Annex #29所指定的),适用于大多数语言,对中文分词效果很差。

分词示例:

54a3f3e97872ac2dc040331127f0e76e9fd.jpg

分词效果如下:

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog's, bone ]

 simple analyzer

    它提供了基于字母的分词,如果遇到不是字母时直接分词,所有字母均置为小写

分词示例:

61c84d0529d540f34a27bfcbfe88cfd5436.jpg

 

分词效果如下:

[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

whitespace analyzer

    它提供了基于空格的分词,如果遇到空格时直接分词

分词示例:

09b2a58d8b54524268160531f0db73014be.jpg

分词效果如下:

[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog's, bone. ]

 stop analyzer

    它与simple analyzer相同,但是支持删除停用词。它默认使用_english_stop单词。

分词示例:

48259f4038b4f0f59b74aa467c3263ee04d.jpg

分词效果如下:

[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]

keyword analyzer

    它提供的是无操作分词,它将整个输入字符串作为一个词返回,即不分词。

分词示例:

5f3cb8a4e651f88e2d416893d790418d86e.jpg

分词效果如下:

[ The 2 QUICK Brown-Foxes jumped over the lazy dog's bone. ]

pattern analyzer

    它提供了基于正则表达式将文本分词。正则表达式应该匹配词语分隔符,而不是词语本身。正则表达式默认为\W+(或所有非单词字符)。

分词示例:

6d530262ee4b8eedf29b2ef5a3c35e28c73.jpg

分词效果如下:

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

language analyzers

    它提供了一组语言的分词,旨在处理特定语言.它包含了一下语言的分词:

    阿拉伯语,亚美尼亚语,巴斯克语,巴西语,保加利亚语,加泰罗尼亚语,cjk,捷克语,丹麦语,荷兰语,英语,芬兰语,法语,加利西亚语,德语,希腊语,印度语,匈牙利语,爱尔兰语,意大利语,拉脱维亚语,立陶宛语,挪威语,波斯语,葡萄牙语,罗马尼亚语,俄罗斯语,索拉尼语,西班牙语,瑞典语,土耳其语,泰国语。

fingerprint analyzer

    它提供了了一种fingerprinting算法,该算法被OpenRefine项目用于帮助集群。

输入文本是模式化语言,经过规范的删除扩展字符、排序、删除索引到分词中。如果配置了停用词列表,也将删除停用词。

分词示例:

2b74560ceb4c5fcb58cc04d2541bf4cf9b1.jpg

分词效果如下:

[ and consistent godel is said sentence this yes ]

彩蛋

    下一篇将写关于es插件安装以及中文分词器使用的相关教程以及踩坑记,欢迎关注和收藏

转载于:https://my.oschina.net/u/2342969/blog/2251764

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值