博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
安装elasticsearch及中文IK和近义词配置
阅读量:6415 次
发布时间:2019-06-23

本文共 4118 字,大约阅读时间需要 13 分钟。

安装elasticsearch及中文IK和近义词配置

安装java环境

java环境是elasticsearch安装必须的

yum install java-1.8.0-openjdk

安装elasticsearch

其实es的安装非常简单了

https://www.elastic.co/downloads/elasticsearchcd /tmpwget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.tar.gztar -xf elasticsearch-1.7.1.tar.gzmv /tmp/elasticsearch-1.7.1 /usr/local/ln -s /usr/local/elasticsearch-1.7.1 /usr/local/elasticsearch

安装head插件

head插件让我们能更简单管理elasticsearch

cd /usr/local/elasticsearch./bin/plugin --install mobz/elasticsearch-head

访问  可以访问

安装IK插件

去rtf项目中获取对应插件,建议别去自己找plugin下,medcl大已经为我们准备好了一切

cd /tmpwget https://github.com/medcl/elasticsearch-rtf/archive/master.zipunzip elasticsearch-rtf-master.zipcd elasticsearch-rtf-mastercp -rf config/ik /usr/local/elasticsearch/config/cp -rf plugins/analysis-ik /usr/local/elasticsearch/plugins/vim /usr/local/elasticsearch/config/elasticsearch.yml增加:index:  analysis:    analyzer:      ik:          alias: [ik_analyzer]          type: org.elasticsearch.index.analysis.IkAnalyzerProvider      ik_max_word:          type: ik          use_smart: false      ik_smart:          type: ik          use_smart: true

配置近义词

近义词组件已经是elasticsearch自带的了,所以不需要额外安装插件,但是想要让近义词和IK一起使用,就需要配置自己的分析器了。

首先创建近义词文档

在config目录下

mkdir analysisvim analysis/synonym.txt编辑:i-pod, i pod, i pad => ipod,sea biscuit, sea biscit => seabiscuit,中文,汉语,汉字

这里可以看到近义词的写法有两种:

a,b => ca,b,c

第一种在分词的时候,a,b都会解析成为c,然后把c存入索引中

第二种在分词的时候,有a的地方,都会解析成a,b,c,把a,b,c存入索引中
第一种方法相比之下有个主词,比较省索引。

配置elasticsearch.yml中的自定义索引,和前面的ik结合,可以这么设置:

index:  analysis:    analyzer:      ik:          alias: [ik_analyzer]          type: org.elasticsearch.index.analysis.IkAnalyzerProvider      ik_max_word:          type: ik          use_smart: false      ik_smart:          type: ik          use_smart: true      my_synonyms:          tokenizer: standard      ik_syno:          type: custom          tokenizer: ik          filter: [my_synonym_filter]      ik_syno_smart:          type: custom          tokenizer: ik          filter: [my_synonym_filter]          use_smart: true    filter:      my_synonym_filter:          type: synonym          synonyms_path: analysis/synonym.txt

上面的配置文件创建了一个filter: my_synonym_filter, 然后创建了两个自定义analyzer: ik_syno和ik_syno_smart

启动elasticsearch:

bin/elasticsearch

案例测试

按照上面的配置,我们使用一个具体的句子进行测试:

120.55.72.158:9700/elasticsearchtest2

{
"index" : {
"analysis" : {
"analyzer" : {
"ik_syno" : {
"tokenizer" : "ik",
"filter" : ["my_synonym_filter"]
}
}
}
}
}

curl -XPOST "192.168.33.10:9200/elasticsearchtest/_analyze?analyzer=ik_syno" -d 'we are eng man i pad 汉语文字'

返回json结构:

{    "tokens": [        {            "token": "we",            "start_offset": 0,            "end_offset": 2,            "type": "ENGLISH",            "position": 1        },        {            "token": "eng",            "start_offset": 7,            "end_offset": 10,            "type": "ENGLISH",            "position": 2        },        {            "token": "man",            "start_offset": 11,            "end_offset": 14,            "type": "ENGLISH",            "position": 3        },        {            "token": "ipod",            "start_offset": 15,            "end_offset": 20,            "type": "SYNONYM",            "position": 4        },        {            "token": "中文",            "start_offset": 21,            "end_offset": 23,            "type": "SYNONYM",            "position": 5        },        {            "token": "汉语",            "start_offset": 21,            "end_offset": 23,            "type": "SYNONYM",            "position": 5        },        {            "token": "汉字",            "start_offset": 21,            "end_offset": 23,            "type": "SYNONYM",            "position": 5        },        {            "token": "文字",            "start_offset": 23,            "end_offset": 25,            "type": "CN_WORD",            "position": 6        }    ]}

这里就可以看到我们之前配置的东西都成功了:

  • are字被过滤,是由于are字是stop_words
  • i pad这个词语被转化为了ipod是由于近义词字典中我们设置了 i pad=>ipod
  • “文字”两个中文字是被分成一个中文词切割,是因为ik的默认main.dic里面有文字两个字
  • “中文”“汉字”“汉语”三个词出现是由于近义词字典中我们设置了这三个为同等级的近义词
本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/p/4789239.html,如需转载请自行联系原作者
你可能感兴趣的文章
深入理解jQuery中$.get、$.post、$.getJSON和$.ajax的用法(转)
查看>>
jQuery常用方法
查看>>
经典算法
查看>>
11 用户交互,显示省市县三级联动的选择
查看>>
sql语句的优化分析
查看>>
运维面试题五十题
查看>>
雷神编码博客入口
查看>>
7.微软AJAX的解决方案
查看>>
线程中断、线程让步、线程睡眠、线程合并
查看>>
当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误
查看>>
主流浏览器
查看>>
String类replaceAll方法正则替换深入分析
查看>>
快速排序
查看>>
极限编程和JUnit
查看>>
iOS中 SDWebImage手动清除缓存的方法 技术分享
查看>>
[Array]448. Find All Numbers Disappeared in an Array
查看>>
因为我想在博客园长呆,所以给博客园提一些改进建议
查看>>
hdu 1087 Super Jumping! Jumping! Jumping! (DP)
查看>>
struts和struts2的区别
查看>>
JavaScript 自执行函数剖析
查看>>