分词器
在ElaticSearch全文检索中,肯定不会把字段一整段的存储其中,否则数据量就会很大,失去了我们用ElaticSearch的意义
这个时候我们就需要其中的一个存放方法
Analyzer (分词器)的作用是把一段文本中的词按规则取出所包含的所有词。 对应的是Analyzer类,这是一个抽象类,切分词的具体规则是由子类实现的,所以对于不同的语言(规则),要用不同的分词器。
ElaticSearch默认的分词器对中文是单字分词,这个时候我们就需要中文分词器
由于自带分词器回将中文一个字一个字进行分词,故只介绍第三方分词器
第三方中文分析器
paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代码在 2008-06-03,在svn中最新也是2010年提交,已经过时,不予考虑。
IK-analyzer:最新版在https://code.google.com/p/ik-analyzer/上,支持Lucene 4.10从2006年12月推出1.0版开始, IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。从3.0版本开 始,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词 歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。 但是也就是2012年12月后没有在更新。
这边我们选择IK分词器,在文章后面会告诉为什么选择他.
安装IK分词器
下载IK分词器:(Github地址:https://github.com/medcl/elasticsearch-analysis-ik)
- 下载zip(压缩包):
-
解压压缩包,并重命名为ik, 复制到plugins目录下,重启es ![在这里插入图片描述](https://img-blog.csdnimg.cn/216c08c0d2054f77853822ae14a31df4.png)
复制到虚拟机中
测试分词效果:
POST /_analyze
{
"text":"中华人民共和国人民大会堂",
"analyzer":"ik_smart"
}
两种分词模式
ik分词器有两种分词模式:ik_max_word和ik_smart模式。
- ik_max_word
会将文本做最细粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为“中华人民共和国、中华人民、中华、华人、人民大会堂、人民、共和国、大会堂、大会、会堂等词语。
- ik_smart
会做最粗粒度的拆分,比如会将“中华人民共和国人民大会堂”拆分为中华人民共和国、人民大会堂。
上面曾说到为什么同样是久远的分词器我们却选用IK分词器呢?这是因为IK分词器可以自定义词库来不断更新,方便我们的使用
自定义词库
如果要让分词器支持一些专有词语,可以自定义词库。
iK分词器自带的main.dic的文件为扩展词典,stopword.dic为停用词典。
也可以上边的目录中新建一个my.dic文件(注意文件格式为utf-8(不要选择utf-8 BOM))
可以在其中自定义词汇:
比如定义:
配置文件中 配置my.dic,
我们已经安装了ik分词器,如何在索引和搜索时去使用ik分词器呢?这个时候我们就需要使用field去使用,那么如何在里面使用呢?使用时怎么指定类型呢?
不着急,我们接着往下走–>
field详细介绍
我们先来看下ES6.2的核心字段,看不懂没关系,留个印象就行
field的属性介绍
type:
通过type属性指定field的类型。
"name":{
"type":"text"
}
analyzer:
通过analyzer属性指定分词模式。
"name":