美文网首页
Elasticsearch 正确设置同义词近义词

Elasticsearch 正确设置同义词近义词

作者: 良先生爱生活 | 来源:发表于2019-08-13 15:55 被阅读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": "西红柿"
          } 
        }
    }
    

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

    相关文章

      网友评论

          本文标题:Elasticsearch 正确设置同义词近义词

          本文链接:https://www.haomeiwen.com/subject/ybfbjctx.html