文档首页> 云搜索服务 CSS> 快速入门> 快速开始使用云搜索服务
更新时间:2024-04-18 GMT+08:00
分享

快速开始使用云搜索服务

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

场景描述

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

假设该电商网站经营商品的数据如下所示:

{
"products":[
{"productName":"2017秋装新款文艺衬衫女装","size":"L"}
{"productName":"2017秋装新款文艺衬衫女装","size":"M"}
{"productName":"2017秋装新款文艺衬衫女装","size":"S"}
{"productName":"2018春装新款牛仔裤女装","size":"M"}
{"productName":"2018春装新款牛仔裤女装","size":"S"}
{"productName":"2017春装新款休闲裤女装","size":"L"}
{"productName":"2017春装新款休闲裤女装","size":"S"}
]
}

准备工作

已注册华为账号并开通华为云,进行了实名认证,且在使用云搜索服务前检查账号状态,账号不能处于欠费或冻结状态。

如果您已有一个华为账号,请跳到下一个任务。如果您还没有华为账号,请参考以下步骤创建。

  1. 打开华为云网站
  2. 在页面右上角单击“注册”,根据提示信息完成注册。
  3. 勾选服务条款, 单击“开通”。
  4. 实名认证,请参考:

步骤1:创建集群

本示例您需要创建一个名称为“Sample-ESCluster”的Elasticsearch集群。此集群仅用于入门指导使用,建议选用“节点规格”为“ess.spec-4u8g”,“节点存储”为“高I/O”,“节点存储容量”为“40GB”。

  1. 登录云搜索服务管理控制台。
  2. 单击右上角的创建集群,进入“创建集群”页面。
  3. 计费模式支持“按需计费”“包年/包月”2种模式。本示例计费模式选择“按需计费”,按需计费按照实际使用时长计费,计费周期为一小时,不足一小时按一小时计费。
  4. 选择“当前区域“可用区”
    表1 区域和可用区参数说明

    参数

    说明

    当前区域

    在右侧下拉框中选择集群的所在区域。

    可用区

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

    本场景示例选择1个可用区。

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

    参数

    说明

    集群版本

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

    集群名称

    自定义集群名称。

    本场景示例您可以创建一个名称为“Sample-ESCluster”的集群。

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

    参数

    说明

    节点数量

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

    本场景示例选择1个节点。

    CPU架构

    目前支持“X86计算”“鲲鹏计算”两种类型。具体支持的类型由实际区域环境决定。

    节点规格

    集群中的节点规格。

    本场景示例节点规格建议选择“ess.spec-4u8g”。

    节点存储

    选择存储类型。

    本示例节点存储建议选择高I/O。

    节点存储容量

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

    本场景示例存储容量建议选择40GB。

    启用Master节点

    Master节点用于管理集群中的所有节点。当需要存储和分析的数据量大,所需节点数量大于20个节点时,建议启用Master节点,保证集群的稳定性。

    本场景示例无需用Master节点。

    启用Client节点

    Client节点用于提供客户端接入集群和分析数据的服务。当需要存储和分析的数据量大,所需节点数量大于20个节点时,建议启用Client节点,保证集群的稳定性。

    本场景示例无需启用Client节点。

    启用冷数据节点

    冷数据节点用于存放对于历史数据要求分钟级别的返回。当用户对历史数据返回时间要求不是很高的话,可以将这部分数据存储在冷数据节点上,从而降低成本。

    本场景示例无需启用冷数据节点。

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

    如果您开通了“企业项目”,在创建集群时,可以给集群绑定一个企业项目。您可以在右侧下拉框中选择当前用户下已创建的企业项目,也可以通过单击“查看项目管理”按钮,前往“企业项目管理”管理控制台,新建企业项目和查看已有的企业项目。

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

    参数

    说明

    虚拟私有云

    VPC即虚拟私有云,是通过逻辑方式进行网络隔离,提供安全、隔离的网络环境。

    选择创建集群需要的VPC,单击“查看虚拟私有云”进入VPC服务查看已创建的VPC名称和ID。如果没有VPC,需要创建一个新的VPC。

    说明:

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

    子网

    通过子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全。

    选择创建集群需要的子网,可进入VPC服务查看VPC下已创建的子网名称和ID。

    安全组

    安全组是一个逻辑上的分组,为同一个VPC内具有相同安全保护需求并相互信任的弹性云服务器提供访问策略。单击“查看安全组”可了解安全组详情。

    安全模式

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

    本场景示例选择关闭安全模式。

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

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

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

步骤2:导入数据

云搜索服务支持通过云数据迁移(简称CDM)、数据接入服务(简称DIS)、Logstash、Kibana或API将数据导入到Elasticsearch。Kibana是一个开源的数据分析与可视化平台,通过Kibana可以搜索、查看存放在Elasticsearch索引中的数据,也可以实现以图表、地图等方式展示数据。云搜索服务的Elasticsearch集群默认提供Kibana,本示例将以Kibana为例介绍将数据导入到Elasticsearch的操作流程。

  1. “集群管理”页面选择已创建的“Sample-ESCluster”集群,单击“操作”列中的“Kibana”进入Kibana控制台。
  2. 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。
    Console左侧区域为输入框,输入框右侧的三角形为执行命令按钮,Console右侧为结果输出区域。
    图5 Console界面
  3. 在Console界面,执行如下命令创建索引“my_store”

    (低于7.x版本)

    PUT /my_store
    {
      "settings": {
        "number_of_shards": 1
      },
      "mappings": {
        "products": {
          "properties": {
            "productName": {
              "type": "text",
              "analyzer": "ik_smart"
            },
            "size": {
              "type": "keyword"
            }
          }
        }
      }
    }
    (7.x版本及高于7.x版本)
    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"
    }
  4. 在Console界面,执行如下命令,将数据导入到“my_store”索引中。

    (低于7.x版本)

    POST /my_store/products/_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"}
    (7.x版本及高于7.x版本)
    POST /my_store/_doc/_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”时,表示导入数据成功。

步骤3:搜索数据

  • 全文检索

    假设用户进入该电商网站,她想要查找名称包含“春装牛仔裤”的商品信息,可以搜索“春装牛仔裤”。这里使用Kibana演示用户搜索数据在后台的执行命令和返回结果。

    执行命令如下所示。

    (低于7.x版本)

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

    (7.x版本及高于7.x版本)

    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"
            }
          }
        ]
      }
    }
    
    • Elasticsearch支持IK分词,上面执行命令会将“春装牛仔裤”分词为“春装”和“牛仔裤”。
    • Elasticsearch支持全文检索,上面执行命令会在所有商品信息中搜索包含“春装”或“牛仔裤”的商品信息。
    • Elasticsearch与传统数据库不同,它能借助倒排索引在毫秒级返回结果。
    • Elasticsearch支持评分排序,在上面返回结果中,前两条商品信息中同时出现了“春装”和“牛仔裤”,后两条商品信息中只出现了“春装”,所以前两条比后两条与检索关键词的匹配度更高,分数更高,排序也更靠前。
  • 聚合结果显示

    该电商网站可以提供聚合结果显示功能,例如: 对“春装”对应的产品按照尺码分类,统计不同尺码的数量。这里使用Kibana演示聚合结果显示功能在后台的执行命令和返回结果。

    执行命令如下所示。

    (低于7.x版本)

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

    (7.x版本及高于7.x版本)

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

    返回结果如下所示。

    (低于7.x版本)

    {
      "took" : 31,
      "timed_out" : false,
      "_shards" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 4,
        "max_score" : 0.0,
        "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
            }
          ]
        }
      }
    }

    (7.x版本及高于7.x版本 )

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

(可选)步骤4:删除索引

如果不再使用对应的索引数据,您可以执行如下命令,删除对应索引,避免造成浪费资源。

DELETE /my_store

返回结果如下所示。

{
  "acknowledged" : true
}

(可选)步骤5:删除集群

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

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

  1. 登录云搜索服务管理控制台。在左侧菜单栏选择集群管理 > Elasticsearch
  2. 进入集群管理页面,选中“Sample-ESCluster”集群所在行,在操作列单击“更多”>“删除”
  3. 在弹出的确认对话框中,确认要删除的集群名称,单击“确定”完成操作。
分享:

    相关文档

    相关产品