管理与使用词库

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

前提条件

已创建检索场景的应用。具体操作,请参见创建应用

管理词库

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch Serverless版本

    说明

    如果您所在的地域没有Elasticsearch Serverless服务,请在顶部菜单栏切换地域。

  3. Elasticsearch Serverless服务控制台的左侧导航栏,单击应用管理

  4. 应用管理页面,单击目标应用名称。

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

    词库列表中显示词库文件名、词库类型、词库来源、文件大小和词条数,并支持添加、下载、更新和删除词典文件。

    • 添加自定义词库。

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

      参数

      说明

      词库来源

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

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

      词库类型

      • ik分词

      • ik停用词

        说明

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

      选择OSS Bucket

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

      选择文件

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

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

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

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

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

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

    • 更新词库配置。

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

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

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

    • 下载词库。

      在目标词库的操作列,单击下载,直接下载对应txt、dic文件到本地。

    • 删除已添加的词库。

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

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
    }
  ]
}