环境介绍
集群环境如下:
- Ubuntu14.04
- ElasticSearch 2.3.1(3节点)
- JDK1.8.0_60
开发环境:
- Windows10
- JDK 1.8.0_66
- Maven 3.3.3
- Intellij IDEA 2016.1
下载编译Pinyin
- clone elasticsearch-analysis-pinyin
通过IntelliJ从git上克隆elasticsearch-analysis-pinyin工程; - 修改ES版本
下载完项目后修改项目根目录下pom.xml文件中的properties/elasticsearch.version节点值为2.3.1,以确保编译后的版本兼容ES2.3.1版本; - 编译
打开IntelliJ Terminal工具,输入以下命令:
mvn clean install -Dmaven.test.skip
可以在项目目录elasticsearch-analysis-pinyin arget eleases看到编译后的结果elasticsearch-analysis-pinyin-1.7.4.zip,以及elasticsearch-analysis-pinyin arget目录下的elasticsearch-analysis-pinyin-1.7.4.jar。
这里我们主要使用zip包。
安装部署
- 安装
在ES服务器每个节点的${ES_HOME}/plugins目录下新建文件夹,名为pinyin;
解压上述zip压缩包,可见三个文件elasticsearch-analysis-pinyin-1.7.4.jar、plugin-descriptor.properties、pinyin4j-2.5.0.jar,将其上传到ES服务器pinyin文件夹内即可; - 重启
节点安装完pinyin插件后,需要重启生效。 - 多节点集群
ES集群每个节点都进行上述安装。
测试
分词测试
- 建立测试索引
建立一个测试分词效果的索引medcl,在节点终端执行如下代码:
curl -XPUT http://localhost:9200/medcl/-d'
{
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin",
"filter" : ["standard"]
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"first_letter" : "none",
"padding_char" : " "
}
}
}
}
}'
- 通过浏览器测试分词
http://10.110.13.144:9200/medcl/_analyze?text=%E5%88%98%E5%BE%B7%E5%8D%8E&analyzer=pinyin_analyzer
若测试成功,浏览器返回结果如下:
{"tokens":[{"token":"liudehua","start_offset":0,"end_offset":3,"type":"word","position":0}]}
建立拼音索引
- 建立索引并设置分词
curl -XPOST http://localhost:9200/medcl/_close
curl -XPUT http://localhost:9200/medcl/_settings -d'
{
"index" : {
"analysis" : {
"analyzer" : {
"pinyin_analyzer" : {
"tokenizer" : "my_pinyin",
"filter" : ["standard"],
"type":"pinyin"
}
},
"tokenizer" : {
"my_pinyin" : {
"type" : "pinyin",
"first_letter" : "none",
"padding_char" : " "
}
}
}
}
}'
curl -XPOST http://localhost:9200/medcl/_open
- 建立mapping
curl -XPOST http://localhost:9200/medcl/folks/_mapping -d'
{
"folks": {
"properties": {
"name": {
"type": "multi_field",
"fields": {
"name": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "pinyin_analyzer",
"boost": 10
},
"primitive": {
"type": "string",
"store": "yes",
"analyzer": "keyword"
}
}
}
}
}
}'
- 上传数据
curl -XPOST http://localhost:9200/medcl/folks/andy -d'{"name":"刘德华"}'
- 在浏览器请求检索
http://10.110.13.144:9200/medcl/folks/_search?q=name:liudehua
若检索成功,浏览器返回以下结果:
{"took":9,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":3.0685282,"hits":[{"_index":"pinyin","_type":"test","_id":"andy","_score":3.0685282,"_source":{"name":"刘德华"}}]}}