引言
本文代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop
在上一篇博客《淘东电商项目(46) -商品搜索服务功能的实现》,实现了使用ES的技术实现商品搜索的功能,效果如下图:
但是只支持中文的搜索方式,在大型的购物网站,一般都支持拼音查询的,其实实现方式很简单,ES只要集成拼音分词器就可以了,本文就来讲解下。
本文目录结构:
1. 拼音分词器的下载与安装
目前使用的ES版本是5.6.12
,所以拼音分词器elasticsearch-analysis-pinyin
的版本必须和es一样也为5.6.12
。
首先下载拼音分词器,地址:https://github.com/medcl/elasticsearch-analysis-pinyin/releases
下在完成后,使用SSH工具上传文件到Linux服务器的user/local
目录:
拷贝到es容器的plugins目录:
docker cp elasticsearch-analysis-pinyin-5.6.12.zip es容器id或es容器名:/usr/share/elasticsearch/plugins
进入ES容器的plugins目录:
docker exec -it es容器id或es容器名 /bin/bash
解压并更改名字:
unzip elasticsearch-analysis-pinyin-5.6.12.zip mv elasticsearch ik-pinyin
删除压缩包,退出并重启ES:
rm elasticsearch-analysis-pinyin-5.6.12.zip exit docker restart es容器id或es容器名
2. 重新定义文档类型映射
如果要使ES支持拼音分词和中文分词,那么需要重新定义文档类型:
1.首先自定义分词器 ,支持拼音和中文分词:
DELETE /product PUT /product { "settings": { "analysis": { "analyzer": { "ik_smart_pinyin": { "type": "custom", "tokenizer": "ik_smart", "filter": ["my_pinyin", "word_delimiter"] }, "ik_max_word_pinyin": { "type": "custom", "tokenizer": "ik_max_word", "filter": ["my_pinyin", "word_delimiter"] } }, "filter": { "my_pinyin": { "type" : "pinyin", "keep_separate_first_letter" : true, "keep_full_pinyin" : true, "keep_original" : true, "limit_first_letter_length" : 16, "lowercase" : true, "remove_duplicated_term" : true } } } } }
2.重新指定文档类型映射拼音分词类型
POST /product/_mapping/product { "product": { "properties": { "@timestamp": { "type": "date" }, "@version": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "attribute_list": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "category_id": { "type": "long" }, "created_time": { "type": "date" }, "detail": { "type": "text", "analyzer":"ik_smart_pinyin", "search_analyzer":"ik_smart_pinyin" }, "id": { "type": "long" }, "main_image": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "name": { "type": "text", "analyzer":"ik_smart_pinyin", "search_analyzer":"ik_smart_pinyin" }, "revision": { "type": "long" }, "status": { "type": "long" }, "sub_images": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "subtitle": { "type": "text", "analyzer":"ik_smart", "search_analyzer":"ik_smart" }, "updated_time": { "type": "date" } } } }
3.重新使用logstash导入数据:
3. 测试
1.启动项目Eureka,商品搜索服务
2.浏览器使用拼音搜索输入:http://localhost:8500/search?name=pg,可以看到能使用pg来实现搜索苹果商品:
本文完!