Elasticsearch 正确设置同义词近义词
2019-08-13 本文已影响0人
良先生爱生活
1、elasticsearch 版本为6.4.3 不同版本可能会有差异,大致原理都是一样的。
2、elasticsearch 目前官方不支持热更新,git上有部分版本支持。所以需要自定义同义词词库,关于词库内容目前没有关于电商词库进行下载。
3、参考链接:
elasticsearch 同义词filter文档
elasticsearch analyzer文档
第一步:
找到elasticsearch安装目录,创建xxxx/config/nalysis/synonym.txt,该文档用于创建同义词词库,具体语法详见参考链接。
将以下字段写入synonym.txt,一定要是UTF-8格式。
西红柿,番茄=>圣女果
第二步:
重启elasticsearch,加载同义词词库。
第三步:
创建索引和映射,my_analyzer 为自定义分词器,my_synonym 为自定义过滤器。具体语法详见参考链接2。
超级最重要的步骤:mappings需要指定字段来使用同义词的filter,否则未指定时将使用默认的filter,搜索时将对同义词不生效。
PUT /test
{
"settings": {
"index" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "ik_smart",
"filter" : ["my_synonym"]
}
},
"filter" : {
"my_synonym" : {
"type" : "synonym",
"synonyms_path" : "analysis/synonym.txt"
}
}
}
}
},
"mappings": {
"doc": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
}
第四步:
创建一个测试文档
POST test/doc/1
{
"title":"我喜欢吃圣女果"
}
第五步:测试
GET /test/doc/_search
{
"query":{
"match": {
"title": "番茄"
}
}
}
GET /test/doc/_search
{
"query":{
"match": {
"title": "西红柿"
}
}
}
以上两个搜索语句都能通过 番茄 和 西红柿 将 圣女果 搜索出来。