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": "西红柿"
      } 
    }
}

以上两个搜索语句都能通过 番茄西红柿圣女果 搜索出来。

上一篇下一篇

猜你喜欢

热点阅读