同义词动态更新

阿里云Elasticsearch Serverless(简称ES Serverless)应用中默认安装elasticsearch-analysis-dynamic-synonym插件,该插件支持动态加载同义词文件,本文介绍如何在ES Serverless应用中实现同义词动态更新。

操作步骤

  1. 同义词文件准备。

    准备一个UTF-8编码格式的同义词TXT文件,并将同义词文件放在OSS中。同义词文件中的内容如下:

    西红柿,番茄,小西红柿,tomato
    土豆,马铃薯,洋芋,potato
    肯德基,KFC
  2. 登录阿里云ES Serverless应用的Kibana控制台。

    具体操作,请参见通过Kibana使用Serverless应用

  3. 在Kibana控制台,单击菜单.png,选择Management > Dev Tools

  4. Console页签中,执行以下命令,创建索引并配置settings,在filter下调用dynamic_synonym接口,通过synonyms_path实现远程词典加载。

    # 创建索引时需要配置settings和mapping
    # 用户在filter下调用dynamic_synonym,通过synonyms_path实现远程词典加载
    
    PUT /test
    {
      "settings": {
        "index": {
          "analysis": {
            "analyzer": {
              "my_analyzer": {
                "type": "custom",
                "tokenizer": "ik_smart",
                "filter": ["remote_synonym"]
              }
            },
            "filter": {
              "remote_synonym" : {
                "type" : "dynamic_synonym",
                "synonyms_path" : "https://****/synonym.txt",
                "interval": 30
              }
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "my_analyzer"
          }
        }
      }
    }

    filter中的参数说明如下,更多参数说明请参见Dynamic Synonym for ElasticSearch

    参数

    说明

    type

    词典文件类型,支持dynamic_synonymdynamic_synonym_graph类型

    synonyms_path

    词典配置文件路径或URL。直接获取OSS中同义词文件的url,获取方式请参见私有文件

    说明

    建议存储词典文件的OSS与Serverless应用在同一地域。

    interval

    刷新词典的时间间隔,默认:60,单位为秒。

  5. 验证同义词配置。

    1. 通过_analyze获取KFC分词效果。

      # 验证同义词配置
      
      GET test/_analyze
      {
        "analyzer": "my_analyzer",
        "text": "KFC"
      }
      

      执行成功后,返回结果如下。

      # 返回结果
      {
        "tokens" : [
          {
            "token" : "肯德基",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "SYNONYM",
            "position" : 0
          },
          {
            "token" : "kfc",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "ENGLISH",
            "position" : 0
          }
        ]
      }
      
    2. 在OSS同义词文件中更新词典内容。

      同义词文件中的内容如下:

      西红柿,番茄,小西红柿,tomato
      土豆,马铃薯,洋芋,potato
      肯德基,KFC,Kentucky Fried Chicken
    3. 在Kibana中执行以下代码,验证分词效果。

      # 验证同义词配置
      
      GET test/_analyze
      {
        "analyzer": "my_analyzer",
        "text": "KFC"
      }
      

      执行成功后,返回结果如下。

      {
        "tokens" : [
          {
            "token" : "kfc",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "ENGLISH",
            "position" : 0
          },
          {
            "token" : "肯德基",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "SYNONYM",
            "position" : 0
          },
          {
            "token" : "kentucky",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "SYNONYM",
            "position" : 0
          },
          {
            "token" : "fried",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "SYNONYM",
            "position" : 1
          },
          {
            "token" : "chicken",
            "start_offset" : 0,
            "end_offset" : 3,
            "type" : "SYNONYM",
            "position" : 2
          }
        ]
      }

常见问题

Q:动态同义词地址出错,如何处理?

A:请根据以下步骤处理。

  1. 验证配置参数:

    检查您的索引映射(mapping)或分析器设置(analyzer settings),确保synonym_path等插件相关参数被正确配置。

  2. 检查同义词文件的编码方式是否为UTF-8。

  3. 确认同义词地址设置:

    检查您的插件配置,确保指向存储同义词文件的地址(阿里云对象存储服务OSS的URL)正确。提供的同义词地址应正确无误,且文件可访问。同义词词典文件在OSS中,获取该文件的URL,请参见私有文件

  4. 联系技术支持:

    若自行排查后问题仍未解决,或者不确定如何在阿里云ES Serverless环境中操作,请提交工单联系阿里云技术支持,提供详细的错误信息和已采取的排查步骤,阿里云技术支持将为您提供针对性的帮助。