要实现Elasticsearch 近义词匹配搜索,我们要有分词器,本篇博客使用的是IK分词器,其次 Elasticsearch 的版本是2.x,Elasticsearch具体版本是2.0.2。
如果没有安装Elasticsearch和IK分词器,请参考下面的入门教程。
安装完毕后,我们就开始了。再次申明一下,这个实现过程很简单,我也帮你踩过雷了,所以坚持照做下去,一定会成功。
先说下需求和具体业务,我在做本站的站内搜索的时候,发现我写的教程都是 Elasticsearch 关键词,而不是ES,而我们有的时候习惯去用ES搜索,所以我希望他们能关联起来,如下需求。
搜索JS教程,结果能出来 Javascript 教程和脚本教程。
开始了。
一、Elasticsearch配置文件更改
首先在 Elasticsearch 的config目录下配置如下配置:$: vi elasticsearch/config/elasticsearch.yml
在最下面加上下面的配置:#在最下面加上下面的代码
index:
analysis:
analyzer:
ik_syno:
type: custom
tokenizer: ik_max_word
filter: [my_synonym_filter]
ik_syno_smart:
type: custom
tokenizer: ik_smart
filter: [my_synonym_filter]
filter:
my_synonym_filter:
type: synonym
synonyms_path: ik/config/synonym.txt
二、添加 IK 同义词库
上面配置了一行 ik/config/synonym.txt ,所以我们在elasticsearch.yml 同级目录下创建目录ik/config/,然后创建文件synonym.txt 。
然后编辑synonym.txt,输入我们的同义词。[elasticsearch@admin config]$ vi ik/config/synonym.txt
es,search,elasticsearch
脚本,js,javascript
用英文逗号间隔,一行为同义词。
三、Java API 创建Mapping
上一篇已经讲到了,所以还请看一遍。需要指定我们的 index分词器,和search分词器。详细请看:Elasticsearch Java API创建Mapping,指定分词器
下面是主要代码。.startObject("title")
.field("type","string")
.field("store", "yes")
//指定index analyzer 为 ik_syno
.field("analyzer", "ik")
//指定search_analyzer 为ik_syno
.field("searchAnalyzer", "ik_syno")
.endObject()
四、Elasticsearch插入数据测试
测试搜索一下ES教程,看看结果。
再测试下js教程关键词。
好了,收工,想要看看具体的效果,请在本站使用快捷键,Ctrl + F,搜索试试,功能今天晚上上线,2017年5月25日 14:55:17。
如果本文对你有帮助,那么请你赞助我,让我更有激情的写下去,帮助更多的人。
¥我需要走的更远,点击我 赞助。
如果还有疑问,点击我加群,为你提供最好的解答。