PolarSearch使用说明

PolarSearchPolarDB提供的一种分布式搜索服务,支持全文检索与向量检索,其架构基于OpenSearch(兼容Elasticsearch生态)并与PolarDB数据库紧密集成。PolarSearch让您通过简单操作就能满足一站式的数据检索需求。

重要

本文PolarSearch使用指南需要您对ElasticSearchOpenSearch有一定了解。更多信息,请参见OpenSearch Documentation

前提条件

集群配置要求

  • 产品版本:企业版。

  • 数据库引擎:MySQL 8.0.1、MySQL 8.0.2。

    说明
    • 以上数据库引擎版本要求均无小版本要求。

    • 更多信息,请参见查询版本号

  • 系列:集群版。

  • Serverless集群不支持PolarSearch。更多信息,请参见Serverless

支持地域与可用区

PolarSearch支持的可用区如下:

地域

可用区

华东1(杭州)

可用区K

华东2(上海)

可用区E、可用区L、可用区N

华南1(深圳)

可用区C、可用区D

华北1(青岛)

可用区C

华北2(北京)

可用区K

华北3(张家口)

可用区B

日本(东京)

可用区A、可用区C

墨西哥

可用区A

费用说明

PolarSearch通过独立的搜索节点支持搜索功能,并收取费用。搜索节点按照普通计算节点计费。同时,搜索节点中的索引与数据将占用一定的存储空间,因此也会产生相应的存储空间费用

添加PolarSearch搜索节点

  • 符合前提条件的已有集群,添加搜索节点。

    1. 登录PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,找到目标集群。

    2. 单击目标集群ID,进入集群基本信息页。

    3. 数据库节点区域,单击增删节点

      image

    4. 增删节点向导对话框,选择新增搜索节点。

  • 新建符合前提条件的集群时,在规格和代理区域的节点个数中需至少增加2个搜索节点。具体步骤,参见自定义购买

    image

创建搜索节点账号

设置管理员账号

说明
  • 添加的账号是数据库的普通权限账号。

  • 添加的普通权限账号为PolarSearch功能的管理员权限账号。

  1. 登录PolarDB控制台,在左侧导航栏单击集群列表,选择集群所在地域,找到目标集群。

  2. 单击目标集群ID,进入集群基本信息页。

  3. 数据库节点区域,将鼠标悬浮在搜索节点,单击设置连接数据库账号

    image

  4. 在对话框中可以选择已有的数据库普通账号或创建新普通账号,并输入账号密码。

    image

设置普通账号

普通账户可以按照索引维度控制账号能访问的索引范围。

获取连接地址

搜索地址

数据库节点区域,将鼠标悬浮在搜索节点,根据您的实际使用的环境,获取对应的私网或公网地址。

image

Dashboard地址

数据库节点区域,将鼠标悬浮在搜索节点,根据您的实际使用的环境,获取对应的Dashboard私网或公网地址。image

登录PolarSearch

通过搜索地址访问

若您偏向于使用API进行管理索引与数据,则可以通过API来访问PolarSearch。此处以ECS实例为例:

  1. 设置集群白名单:请根据您ECS实例所属网络添加对应的IP地址至PolarDB MySQL集群白名单中。

    说明
    • ECS实例与PolarDB MySQL集群在同一专有网络VPC下,请填写ECS实例的私网IP。

    • ECS实例与PolarDB MySQL集群不在同一专有网络VPC下,请填写ECS实例的公网IP。

  2. 连接PolarSearch:执行如下命令,如果返回集群信息,说明集群可服务。其中,<endpoint>:<port>需替换PolarSearch搜索地址<user_name>:<passwd>PolarSearch管理员账号

    curl http://<endpoint>:<port>/ -u <user_name>:<passwd>

通过Dashboard访问

若您想通过白屏方式操作PolarSearch,则可以通过Dashboard(控制台)来访问PolarSearch。此处以本地环境中浏览器为例:

  1. 设置集群白名单:请根据您本地环境的IP地址至PolarDB MySQL集群白名单中。

  2. 在浏览器中登录PolarSearch控制台:

    1. 在浏览器地址栏输入http://<endpoint>:<port>后回车。其中,<endpoint>:<port>需替换PolarSearchDashboard公网地址

    2. 在控制台登录页面,输入PolarSearch管理员账号,即可登录Kibana兼容的PolarSearch控制台。

操作示例

说明
  • 本例全部在ECS实例中通过命令行完成。

  • PolarSearch完全兼容OpenSearch 2.19.0版本的SDKREST API,其他版本可能存在兼容性问题。更多信息,请参见OpenSearch

创建索引

搜索节点中的索引,相当于关系型数据库中的表,可使用Elasticsearch兼容的REST API创建,示例如下:

curl -X PUT "http://<endpoint>:<port>/articles" -H "Content-Type:application/json" -d '
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "title": {
        "type": "text"  // 全文搜索字段(注释字段,测试请删除)
      },
      "content": {
        "type": "text"
      },
      "author": {
        "type": "keyword"  // 精确匹配字段(注释字段,测试请删除)
      }
    }
  }
}
'

导入数据

curl -X POST "http://<endpoint>:<port>/articles/_bulk" -H "Content-Type:application/json" -d '
{"index": {}}
{"title": "Introduction to PolarSearch", "content": "PolarSearch is a powerful search engine.", "author": "Allen"}
{"index": {}}
{"title": "Advanced Search Techniques", "content": "Learn how to use full-text search and filters in PolarDB.", "author": "Lang"}
{"index": {}}
{"title": "Elasticsearch vs PolarSearch", "content": "A comparison of Elasticsearch and PolarSearch features.", "author": "Zhao"}
'

执行搜索查询

数据导入完成后,可通过SDK或者REST API进行全文搜索,如下所示:

curl -X GET "http://<endpoint>:<port>/articles/_search" -H "Content-Type:application/json" -d '
{
  "query": {
    "match": {
      "content": "PolarSearch"
    }
  }
}'
说明

更多搜索查询语法,请参见OpenSearch

创建向量索引

curl -X PUT "http://<endpoint>:<port>/my-vector-index" -H "Content-Type:application/json" -d '
{
  "settings": {
    "index": {
      "knn": true
    }
  },
  "mappings": {
    "properties": {
      "vector_field": {
        "type": "knn_vector",
        "dimension": 4
      },
      "metadata": {
        "type": "text"
      }
    }
  }
}
'

插入向量数据

curl -X POST "http://<endpoint>:<port>/my-vector-index/_bulk" -H "Content-Type:application/json" -d '
{"index": {}}
{"vector_field": [0.1, 0.5, -0.3, 0.8], "metadata": "Document 1"}
{"index": {}}
{"vector_field": [-0.2, 0.7, 0.4, -0.1], "metadata": "Document 2"}
'

向量检索

curl -X GET "http://<endpoint>:<port>/my-vector-index/_search" -H "Content-Type:application/json" -d '
{
  "size": 2,
  "query": {
    "knn": {
      "vector_field": {
        "vector": [0.1, 0.5, -0.3, 0.8],
        "k": 2
      }
    }
  }
}
'