管理与使用词库

阿里云Elasticsearch Serverless(简称ES Serverless)允许用户上传和管理词库,提供更为灵活高效的检索能力,使得用户能够根据业务需求灵活地自定义和调整分词策略,助力企业级用户构建智能、高性能的搜索与分析系统。

前提条件

创建检索通用型应用

进入词库管理

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

  2. 在左侧导航栏单击应用管理,进入应用列表。

  3. 单击目标应用名称,进入应用详情页。

  4. 在左侧导航栏,单击词库管理,管理词库。

    您可在词库列表查看词库文件名、词库类型、词库来源、文件大小和词条数等信息,也可按需添加更新下载删除词典文件。

管理词库

添加自定义词库

单击添加自定义词库,在弹出的对话框中配置词库。

参数

说明

词库来源

  • 上传文件:上传本地词库

  • 添加OSS路径:上传OSS中存放的词库

词库类型

  • ik分词

  • ik停用词

    说明

    上传的停用词词库会自动合并到分词词库中。

选择OSS Bucket

选择与应用在同一个地域的存放目标词库的OSS Bucket。

选择文件

  • 词库来源为上传文件时,通过单击或拖拽上传本地词库。

  • 词库来源为添加OSS路径时:

    • 目录名称需包含es-serverless,或为OSS Bucket添加es-serverless:es-serverless标签。

    • 添加词典文件:选择词典所在的OSS文件目录,并选择需要添加的词典文件。

说明
  • 仅支持dic格式的词典文件,且词典文件采用UTF8编码方式。

  • 上传词库时,如果已有同名同类词库,系统会覆盖原有词库。

更新词库配置

在目标词库的操作列,单击更新,在弹出的对话框中修改词库来源和更新后的词库文件。

说明
  • 不允许更改词库名称和类型。

  • 选择的词库名称需要与源词库名称相同。

下载词库

在目标词库的操作列,单击下载,直接下载对应TXTDIC文件至本地。

删除词库

  • 删除操作:在目标词库的操作列,选择删除,单击确认,删除词库。

  • 删除影响:在ES删除自定义词库(例如,IK分词器的扩展词典或停用词库)后,对搜索准确性及分词行为会产生如下影响。

    • 分词粒度改变

      • 新写入数据:删除词库后,新索引的文档将不再使用原词库规则分词。例如:删除金融专有名词词库后,“量化交易”可能被拆分为“量”、“化”、“交”、“易”而非完整术语。

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

    • 搜索效果下降

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

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

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

重要

建议您:

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

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

ik分词词库使用

说明

本文中的命令,均可在Kibana控制台中执行。登录Kibana控制台,请参见登录Kibana控制台

前提条件

已上传一个或多个ik自定义分词词库或停用词词库。

测试分词

执行以下代码测试分词效果。

# 可以进行分词测试,指定analyzer为 "ik_smart" or "ik_max_word"

GET /_analyze
{
  "text": "中华人民共和国国歌",
  "analyzer": "ik_smart"
}

返回结果如下。

{
  "tokens" : [
    {
      "token" : "中华人民共和国",
      "start_offset" : 0,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "国歌",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 1
    }
  ]
}

插入数据并验证分词

执行以下代码插入数据并验证分词。

# 创建索引并指定mapping中某个字段的分词为"ik_max_word",进行数据插入并查询分词验证

PUT /my_index
{
  "mappings": {
    "my_type": {
      "properties": {
        "text": {
          "type": "text",
          "analyzer": "ik_max_word"
        }
      }
    }
  }
}

#插入数据
POST /my_index/_doc/
{
  "text": "我是中国人,我爱我的祖国"
}


GET /my_index/_analyze
{
  "analyzer": "ik_max_word",
  "text": "我是中国人,我爱我的祖国"
}

返回结果如下。

{
  "tokens" : [
    {
      "token" : "我",
      "start_offset" : 0,
      "end_offset" : 1,
      "type" : "CN_CHAR",
      "position" : 0
    },
    {
      "token" : "中国人",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "中国",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "国人",
      "start_offset" : 3,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 3
    },
    {
      "token" : "我",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
      "token" : "爱我",
      "start_offset" : 7,
      "end_offset" : 9,
      "type" : "CN_WORD",
      "position" : 5
    },
    {
      "token" : "祖国",
      "start_offset" : 10,
      "end_offset" : 12,
      "type" : "CN_WORD",
      "position" : 6
    }
  ]
}