设置es同义词,可以使搜索引擎在不加入算法和机器学习的情况下,优化搜索准确性,
例如,苹果手机和iPhone使同义词,搜索iPhone时,理论上内容为苹果手机的也应该被搜索出来
es本身内置支持了设置同义词,但是不可以热更新,只能每次启动es时才会加载es的同义词词典,所以,我采用的时安装dynamic-synonym插件,进行热更新,避免更新词典后还需要重启es才能使词典生效
下载插件源码
https://github.com/ginobefun/elasticsearch-dynamic-synonym
编码
mvn install
将编译生成的zip文件,拷贝到es 的插件目录,并解压更名为dynamic-synonym
重启es,
设置索引,
PUT test
{
"settings": {
"number_of_shards": 5,
"number_of_replicas": 2,
"index": {
"analysis": {
"filter": {
"local_synonym": {
"type": "dynamic_synonym",
"synonyms_path": "synonyms.txt",
"interval": 30
},
"synonym_graph": {
"type": "dynamic_synonym_graph",
"synonyms_path": "http://122.9.0.48:9000/synonym.txt",
"interval": 30
}
},
"analyzer": {
"synonym": {
"tokenizer": "ik_smart",
"filter": [
"synonym_graph"
]
}
}
}
}
},
"mappings": {
"properties": {
"names": {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
},
"analyzer": "synonym"
}
}
}
}
编辑web访问路径下的synonym.txt文件
例如:
插入文档,并验证
搜索苹果,查询出同义词iphone文档