词库管理

阿里云Elasticsearch Serverless(简称ES Serverless)内置增强型IK分词插件,支持上传自定义词库,并可为不同索引或分析器配置独立词库,实现词库的分级管理与作用域隔离,助力企业构建更精准、灵活的中文检索能力。本文介绍如何添加、使用及管理IK分词词库。

背景信息

IK分词插件用于将连续的中文句子切分为有意义的词语,其主要组成如下:

插件组成

描述

分词规则及词库类型

分词器

负责将中文文本拆分为有意义的词语(Token),决定分词粒度。

支持的分词规则如下:

  • ik_max_word:将文本按照最细粒度进行拆分,适合术语查询。例如,会将输入文本计算机汉字输入方法拆分为计算机,计算,算机,汉字输入,汉字,输入,方法

  • ik_smart:将文本按照粗粒度进行拆分,适合短语查询。例如,会将计算机汉字输入方法拆分为计算机,汉字输入,方法

词库文件

提供词汇基础,分词器需基于词库文件进行分词。

说明

词库文件要求每行一个词,并保存为UTF-8编码的DIC文件。

IK分词插件内置默认的主词库(main.dic)、停用词词库(stopword.dic)、介词词库(preposition.dic)、量词词库(quantifier.dic),可直接使用。

您也可根据业务需要添加自定义词库,优化分词效果。支持添加的词库类型如下:

  • IK分词词库:提供给分词器的基础词汇知识库,分词器将基于该词库进行分词。

    若创建索引时指定了该词库,则向索引中写入数据时,应用会将该数据与词库中的词进行匹配,并将匹配到的词建立索引,该索引可通过相应的关键词被检索到。

  • IK停用词词库:通常会将一些无意义的词添加至停用词词库。例如,也、了、仍、从、以。

    说明

    可参考ES官网IK分词配置文件Config目录下的extra_stopword.dic文件。

    若创建索引时指定了该词库,则向索引中写入数据时,应用会将该数据与词库中的词进行匹配,并将匹配到的词过滤,被过滤的词不会出现在倒排索引中。

ES Serverless默认内置增强型IK分词插件,可实现词库的配置体系分级与作用域隔离。您可为不同索引或分析器配置独立的分词词库,实现精细化管理。

说明

高优先级词库配置会完全覆盖低优先级词库配置,即当多个词库对同一个词或分词规则定义不同时,以高优先级的词库配置为准。

词库级别

核心优势

作用域

优先级

分析器 (Analyzer) 级别

提供精细化控制,实现同一索引的不同字段可使用不同词库。

目标自定义分析器

最高

索引 (Index) 级别

实现业务隔离,不同索引(例如,产品库、文章库)可拥有独立的词库。

目标索引

中等

应用 (Application) 级别

提供基础词库,方便快速使用。

说明

内置词库默认为应用级别。

应用全局

最低

使用限制

  • 词库数量及大小限制:最大支持上传10个词库文件,并且所有词库文件的大小总和不超过20MB。

    • 若词库文件总数超过上限,请合并相关文件,或通过调整max_dics_count配额来提高最大支持上传的词库文件限额。

    • 若词库文件总大小超过上限,请压缩相关文件,或通过调整max_all_dic_size配额来提高词库文件总大小的限额。

  • 词库格式限制:仅支持将DIC格式的文件添加为词库。

进入词库管理

  1. 进入应用详情页。

    1. 登录Elasticsearch Serverless控制台,在顶部菜单栏切换至目标地域。

    2. 在左侧导航栏单击应用管理,单击已创建的应用名称,进入应用详情页。

  2. 在左侧导航栏的搜索调优中心 > 词库管理页签,您可按需添加词库使用词库,并执行相关管理操作。

添加词库

词库管理页面单击添加自定义词库,输入词库名称,按照界面指引添加IK分词词库IK停用词词库。您可通过如下方式上传词库文件。

说明
  • 词库名称必须在当前应用内唯一,并且词库添加成功后名称不可更改。

  • 新词库添加后,仅支持对新创建的索引进行分词,存量索引不会基于该词库进行重新分词。因此,建议您对存量索引使用旧词库,而对新创建的索引使用新词库进行分词。

image

  • 从本地上传:单击image图标或通过拖拽方式上传本地文件。

  • OSS文件上传:选择目标OSS Bucket中的指定文件进行上传。

    • BucketES Serverless应用需在同一地域。

    • Bucket中的目录名称需包含es-serverless,或需为Bucket添加es-serverless: es-serverless标签,否则将导致上传失败。

      说明

      ES Serverless需根据es-serverless关键字对OSS Bucket进行服务授权,获取该OSS Bucket数据。

    • ES Serverless应用不支持自动同步更新OSS中的词库文件。若源端OSS中的词库文件内容发生变化,需通过IK词库更新操作使之生效。

配置并使用词库

词库文件上传完成后,大约需要2min生效。您可在词库生效后,进入Kibana配置并使用词库进行分词。

验证词库的有效性

您可使用POST /_analyze接口,测试添加的词库是否生效。示例代码如下。

POST /_analyze
{
  "analyzer": "ik_smart",
  "text": "租户专用词汇测试"
}

索引级别词库配置

示例创建一个名为 products 的索引,并且该索引使用business-termsproduct-names分词词库,及stop-words停用词词库进行分词。

说明

执行该操作前,需先将相关词库添加至应用中。

PUT /products
{
  "settings": {
    "index": {
      "ik": {
        "extra_dict_ids": ["business-terms", "product-names"],
        "extra_stop_dict_ids": ["stop-words"]
      }
    }
  },
  "mappings": {
    "properties": {
      "title": { "type": "text", "analyzer": "ik_max_word" },
      "content": { "type": "text", "analyzer": "ik_smart" }
    }
  }
}
  • extra_dict_ids:表示添加的自定义IK分词词库。

  • extra_stop_dict_ids:表示添加的自定义IK停用词词库。

分析器级别词库配置

  • 方式一:通过自定义分析器(analyzer)+自定义分词器(tokenizer)方式,在分词器中配置自定义词库,扩展性强,适用于复杂业务。

    示例创建一个名为 custom_analyzer_index 的索引,并配置对my_ik_analyzer分析器使用analyzer-specific-dictspecial-terms分词词库,及analyzer-stop-words停用词词库,实现对 content 字段使用独立词库进行分词。

    说明

    执行该操作前,需先将相关词库添加至应用中。

    PUT /custom_analyzer_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_ik_analyzer": {
              "type": "custom",
              "tokenizer": "ik_tokenizer",
              "filter": ["lowercase"]
            }
          },
          "tokenizer": {
            "ik_tokenizer": {
              "type": "ik_max_word",
              "use_smart": false,
              "enable_lowercase": true,
              "extra_dict_ids": ["analyzer-specific-dict", "special-terms"],
              "extra_stop_dict_ids": ["analyzer-stop-words"]
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "content": {
            "type": "text",
            "analyzer": "my_ik_analyzer"
          }
        }
      }
    }
    • extra_dict_ids:表示添加的自定义IK分词词库。

    • extra_stop_dict_ids:表示添加的自定义IK停用词词库。

  • 方式二:直接在分析器定义中配置自定义词库,简洁高校,适用于标准场景。

    创建一个名为 analyzer_level_index 的索引,并定义两个分析器,实现同一个索引中,不同字段使用独立的词库进行分词。

    说明

    执行该操作前,需先将相关词库添加至应用中。

    • product_analyzer分析器:使用product-dictbrand-names分词词库,及product-stop-words停用词词库,对product_name字段进行分词。

    • content_analyzer分析器:使用content-dicttechnical-terms分词词库,及content-stop-words停用词词库,对description字段进行分词。

    PUT /analyzer_level_index
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "product_analyzer": {
              "type": "ik_smart",
              "extra_dict_ids": ["product-dict", "brand-names"],
              "extra_stop_dict_ids": ["product-stop-words"]
            },
            "content_analyzer": {
              "type": "ik_max_word",
              "extra_dict_ids": ["content-dict", "technical-terms"],
              "extra_stop_dict_ids": ["content-stop-words"]
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "product_name": {
            "type": "text",
            "analyzer": "product_analyzer"
          },
          "description": {
            "type": "text",
            "analyzer": "content_analyzer"
          }
        }
      }
    }
    • extra_dict_ids:表示添加的自定义IK分词词库。

    • extra_stop_dict_ids:表示添加的自定义IK停用词词库。

管理词库

词库添加后,您可在词库管理页面查看词库的基本信息,或按需执行词库的下载、更新、删除等操作。image

  • 查看词库:可查看词库的类型、来源、文件大小及词条数量等信息。

  • 下载词库:可将该词库中的词库文件下载至本地。

  • 更新词库:可将业务所需的最新词库文件更新至当前词库中。

    重要
    • 词库更新过程不会导致业务中断,更新后,仅影响新写入数据的分词,存量索引不会使用新词库进行分词。由于新旧分词逻辑不一致,可能导致历史数据无法查询。

    • 如需对存量索引均采用最新词库进行分词,可执行POST /your_index/_update_by_query操作,将目标索引中的所有文档按照最新分词规则重新分词。为避免对业务产生其他影响,请在业务低峰期执行该操作。

  • 删除词库:若当前词库无需使用,可将其删除。词库删除后无法恢复,请谨慎操作。

    重要
    • 建议您非必要不删除词库,优先通过更新词库内容调整分词策略。

    • 若必须删除词库且需修复历史数据,可通过“先更新词库,再对旧索引执行_reindex重建索引”确保数据分词一致性。

更新或删除词库影响

更新或删除词库,可能对搜索准确性及分词行为会产生如下影响:

  • 分词粒度改变

    • 新写入数据:更新或删除词库后,新索引的文档将不再使用原词库规则分词。

    • 历史数据:已索引文档的分词结果不受影响,但搜索时若使用新分词规则,可能导致召回率下降。

  • 搜索效果下降

    • 召回率降低:搜索关键词可能无法匹配到原词库定义的复合词。例如:词库删除“机器学习”后,搜索“机器学习”可能无法召回包含该术语的文档(搜索词将被拆分为“机器”、“学习”)。

    • 准确率波动:停用词库删除后,无意义的词(例如,“的”、“啊”)将重新参与搜索,会增加噪声结果。

  • 相关度评分偏移:词频(TF)、逆文档频率(IDF)等基于分词结果进行计算,词库更新或删除后可能改变评分逻辑,影响排序合理性。