更新时间:2026-01-12 GMT+08:00

使用OpenSearch搜索数据

本章节为您提供了一个通过CSS服务的OpenSearch集群完成商品搜索的示例,您可以参考此示例来了解云搜索服务,包括创建索引、导入数据、搜索数据等操作。

场景描述

某女装品牌在网上经营电商业务,以前使用传统数据库来为用户提供商品搜索功能,但随着用户数量和业务的增长,使用传统数据库的弊端愈来愈明显。主要问题表现为响应速度慢、准确性低。为了改善用户体验从而避免用户流失,该电商网站开始使用云搜索服务为用户提供商品搜索功能,不仅解决了之前使用传统数据库产生的问题,而且实现了用户数量的增长。

假设该电商网站经营商品的数据如表1所示。
表1 某电商网站经营的商品

productName

size

2017秋装新款文艺衬衫女装

L

2017秋装新款文艺衬衫女装

M

2017秋装新款文艺衬衫女装

S

2018春装新款牛仔裤女装

M

2018春装新款牛仔裤女装

S

2017春装新款休闲裤女装

L

2017春装新款休闲裤女装

S

操作流程

以下是使用OpenSearch集群完成数据搜索的操作步骤。

  1. 步骤一:创建集群(旧版):创建一个非安全模式的OpenSearch集群用于搜索数据。
  2. 步骤二:登录OpenSearch Dashboards:登录OpenSearch Dashboards,访问集群。
  3. 步骤三:创建索引:在OpenSearch Dashboards中给集群创建索引。
  4. 步骤四:导入数据:在OpenSearch Dashboards中使用开源OpenSearch API导入数据。
  5. 步骤五:搜索数据:在OpenSearch集群中对数据进行全文检索和聚合结果显示。
  6. 步骤六:删除索引:当不再使用对应的索引数据时,可以删除对应索引节约资源。

步骤一:创建集群(旧版)

创建一个OpenSearch非安全集群用于搜索数据。

  1. 登录云搜索服务管理控制台。
  2. 在左侧导航栏选择集群管理 > OpenSearch
  3. 单击右上角的创建集群,进入“创建集群”页面。
  4. 配置集群的计费模式和可用区。
    表2 计费模型和可用区参数说明

    参数

    说明

    取值样例

    当前区域

    选择集群的所在区域。

    不同区域的云服务产品之间内网互不相通。请就近选择靠近您业务的区域,可减少网络时延,提高访问速度。

    xxx

    可用区

    选择集群工作区域下关联的可用区。最多支持配置3个“可用区”。

    可用区1

  5. 配置集群基本信息。
    图1 配置集群信息
    表3 基本参数说明

    参数

    说明

    取值样例

    集群类型

    选择“OpenSearch”

    OpenSearch

    集群版本

    选择所需的集群版本,支持的版本以界面可选项为准。

    1.3.6

    集群名称

    自定义集群名称。

    Sample-OSCluster

    集群描述

    为集群添加描述,方便用户识别。

    /

  6. 配置集群的规格信息。
    图2 配置集群规格
    表4 规格参数说明

    参数

    说明

    取值样例

    节点数量

    设置集群中的数据节点个数。可选节点数为1~32。

    1

    CPU架构

    具体支持的类型由实际区域环境决定。

    X86计算

    节点规格

    选择集群节点的规格。

    ess.spec-4u8g

    节点存储

    选择集群节点的存储类型。

    高I/O

    节点存储容量

    设置集群节点的存储空间大小,其取值范围与节点规格关联,不同的规格允许的取值范围不同。节点存储容量只支持配置为20的倍数。

    40GB

    启用Master节点

    Master节点负责管理集群中所有节点任务。

    不勾选

    启用Client节点

    Client节点负责接收并协调外部请求,如search和write请求。

    不勾选

    启用冷数据节点

    冷数据节点用于存储对查询时延要求不高,但数据量较大的历史数据。

    不勾选

  7. 设置集群的企业项目。

    如果您开通了“企业项目”,在创建集群时,可以给集群绑定一个企业项目。本示例选择默认企业项目“default”

  8. 单击“下一步:网络配置”,设置集群的网络配置。
    图3 配置网络
    表5 网络配置参数说明

    参数

    说明

    取值样例

    虚拟私有云

    指定集群节点使用的虚拟专用网络,实现不同业务的网络隔离。

    说明:

    此处您选择的VPC必须包含网段(CIDR),否则集群将无法创建成功。新建的VPC默认包含网段(CIDR)。

    vpc-default

    子网

    集群使用子网实现与其他网络的隔离,并独享所有网络资源,以提高网络安全。

    subnet-default

    安全组

    安全组起着虚拟防火墙的作用,为集群提供安全的网络访问控制策略。

    说明:

    为了确保您能够正常访问集群,需要放通安全组9200规则。

    default

    安全模式

    集群支持选择是否开启安全模式,开启之后将对集群进行通讯加密和安全认证。

    关闭

  9. 单击“下一步:高级配置”,可以设置集群自动快照和其他高级功能。

    本集群仅做入门指导使用,无需开启集群快照和高级功能。

  10. 单击“下一步:确认配置”,确认完成后单击“立即创建”开始创建集群。
  11. 单击“返回集群列表”,系统将跳转到“集群管理”页面。您创建的集群将展现在集群列表中,且集群状态为“创建中”,创建成功后集群状态会变为“可用”

步骤二:登录OpenSearch Dashboards

集群创建成功后,通过OpenSearch Dashboards访问OpenSearch集群。

  1. 在OpenSearch集群列表,选择已创建的“Sample-OSCluster”集群,单击操作列中的“Dashboards”进入OpenSearch Dashboards控制台。
  2. 在OpenSearch Dashboards的左侧导航中选择“Dev Tools”,进入Console界面。
    控制台左侧是命令输入框,其右侧的三角形图标为执行按钮,右侧区域则显示执行结果。
    图4 Console界面

步骤三:创建索引

在OpenSearch集群中创建索引,用于存储数据。

在OpenSearch Dashboards中执行如下命令,创建索引“my_store”
PUT /my_store
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "productName": {
        "type": "text",
        "analyzer": "ik_smart"
        },
        "size": {
          "type": "keyword"
        }
      }
    }
  }

返回结果如下所示:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_store"
}

步骤四:导入数据

OpenSearch集群支持通过多种方式导入数据,本示例选择在OpenSearch Dashboards上使用开源OpenSearch API导入数据。

在OpenSearch Dashboards中执行如下命令,将数据导入到“my_store”索引中。
POST /my_store/_bulk
{"index":{}}
{"productName":"2017秋装新款文艺衬衫女装","size":"L"}
{"index":{}}
{"productName":"2017秋装新款文艺衬衫女装","size":"M"}
{"index":{}}
{"productName":"2017秋装新款文艺衬衫女装","size":"S"}
{"index":{}}
{"productName":"2018春装新款牛仔裤女装","size":"M"}
{"index":{}}
{"productName":"2018春装新款牛仔裤女装","size":"S"}
{"index":{}}
{"productName":"2017春装新款休闲裤女装","size":"L"}
{"index":{}}
{"productName":"2017春装新款休闲裤女装","size":"S"}

当返回结果信息中“errors”字段的值为“false”时,表示导入数据成功。

步骤五:搜索数据

在OpenSearch集群中对数据进行全文检索和聚合结果显示。

  • 全文检索

    假设用户进入该电商网站,想要查找名称包含“春装牛仔裤”的商品信息,可以搜索“春装牛仔裤”。

    在OpenSearch Dashboards中执行如下搜索命令:

    GET /my_store/_search
    {
      "query": {"match": {
        "productName": "春装牛仔裤"
      }}
    }

    返回结果如下所示:

    {
      "took" : 3,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 4,
          "relation" : "eq"
        },
        "max_score" : 1.7965372,
        "hits" : [
          {
            "_index" : "my_store",
            "_type" : "_doc",
            "_id" : "9xf6VHIBfClt6SDjw7H5",
            "_score" : 1.7965372,
            "_source" : {
              "productName" : "2018春装新款牛仔裤女装",
              "size" : "M"
            }
          },
          {
            "_index" : "my_store",
            "_type" : "_doc",
            "_id" : "-Bf6VHIBfClt6SDjw7H5",
            "_score" : 1.7965372,
            "_source" : {
              "productName" : "2018春装新款牛仔裤女装",
              "size" : "S"
            }
          },
          {
            "_index" : "my_store",
            "_type" : "_doc",
            "_id" : "-Rf6VHIBfClt6SDjw7H5",
            "_score" : 0.5945667,
            "_source" : {
              "productName" : "2017春装新款休闲裤女装",
              "size" : "L"
            }
          },
          {
            "_index" : "my_store",
            "_type" : "_doc",
            "_id" : "-hf6VHIBfClt6SDjw7H5",
            "_score" : 0.5945667,
            "_source" : {
              "productName" : "2017春装新款休闲裤女装",
              "size" : "S"
            }
          }
        ]
      }
    }
    
    • OpenSearch支持IK分词,上面执行的搜索命令会将“春装牛仔裤”分词为“春装”和“牛仔裤”。
    • OpenSearch支持全文检索,上面执行的搜索命令会在所有商品信息中搜索包含“春装”或“牛仔裤”的商品信息。
    • OpenSearch与传统数据库不同,它能借助倒排索引在毫秒级返回结果。
    • OpenSearch支持评分排序,在返回结果中,前两条商品信息中同时出现了“春装”和“牛仔裤”,后两条商品信息中只出现了“春装”,所以前两条比后两条与检索关键词的匹配度更高,分数更高,排序也更靠前。
  • 聚合结果显示

    该电商网站可以提供聚合结果显示功能,例如: 对“春装”对应的产品按照尺码分类,统计不同尺码的数量。

    在OpenSearch Dashboards中执行如下聚合结果命令:

    GET /my_store/_search
    {
      "query": {
        "match": {
          "productName": "春装"
        }
      },
      "size": 0,
      "aggs": {
        "sizes": {
          "terms": {
            "field": "size"
          }
        }
      }
    }

    返回结果如下所示:

    {
      "took" : 3,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 4,
          "relation" : "eq"
        },
        "max_score" : null,
        "hits" : [ ]
      },
      "aggregations" : {
        "sizes" : {
          "doc_count_error_upper_bound" : 0,
          "sum_other_doc_count" : 0,
          "buckets" : [
            {
              "key" : "S",
              "doc_count" : 2
            },
            {
              "key" : "L",
              "doc_count" : 1
            },
            {
              "key" : "M",
              "doc_count" : 1
            }
          ]
        }
      }
    }

步骤六:删除索引

当不再使用对应的索引数据时,可以在OpenSearch Dashboards中执行如下命令删除对应索引,避免造成资源浪费。

DELETE /my_store

返回结果如下所示。

{
  "acknowledged" : true
}

后续步骤

已完成数据搜索业务,无需继续使用集群时,可删除集群释放资源。

由于集群删除后,数据无法恢复,请谨慎操作。

  1. 登录云搜索服务管理控制台。
  2. 在左侧导航栏选择集群管理 > OpenSearch
  3. 在集群列表,选择“Sample-OSCluster”集群,在操作列单击“更多”>“删除”
  4. 在弹出的确认对话框中,输入“DELETE”,单击“确定”完成操作。