全部产品
Search
文档中心

检索分析服务Elasticsearch版:快速入门

更新时间:Jul 17, 2024

本文指引您快速创建一个阿里云Elasticsearch实例,并访问该实例,使用Restful API完成创建索引、创建文档并插入数据、搜索数据、删除索引等操作。

前提条件

已注册阿里云账号。 具体操作,请参见账号注册

场景说明

某金融服务企业通过线上平台管理理财项目,之前使用传统数据库为客户提供理财产品的搜索功能。由于收益信用良好,得到了不少客户的青睐,但随之而来的是业务体系逐步扩大,客户信息也逐步增加,使得传统型数据库的缺陷越来越明显。为了改善搜索响应迟缓、精准性无法保障、数据服务设备性能降低等状况,该企业引入了阿里云Elasticsearch产品,为用户提供理财产品的搜索功能。阿里云Elasticsearch有效地解决了之前传统数据库存在的问题,同时提升了客户满意度。本文以此场景为例,为您介绍如何使用阿里云Elasticsearch搭建集群和搜索数据。

本场景假设该企业的理财产品信息如下所示。

{
  "products":[
    {"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
    {"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
    {"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
    {"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
    {"productName":"理财产品E","annual_rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
    {"productName":"理财产品F","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}
  ]
}

操作流程

  1. 步骤一:创建实例

    创建一个阿里云Elasticsearch实例。

  2. 步骤二:通过Kibana访问实例

    等待实例状态正常后,通过Kibana访问阿里云Elasticsearch实例。

  3. 步骤三:创建索引

    通过Restful API完成索引创建。

  4. 步骤四:创建文档并插入数据

    通过Restful API在文档中批量插入数据。

  5. 步骤五:搜索数据

    通过Restful API完成全文数据搜索和按查询条件搜索。

  6. (可选)步骤六:删除索引

    如果不再使用索引,可以通过命令删除对应索引,避免浪费资源。

  7. (可选)步骤七:释放实例

    如果不再需要实例,可以释放实例。实例释放后数据无法恢复,建议释放实例前先备份数据。

操作视频

步骤一:创建实例

  1. 前往实例创建页面

  2. 在购买页面完成实例配置。

    参数

    说明

    付费模式

    • 包年包月:长期使用ES实例,建议选择包年包月(一次性付费)。优势是比按量付费更实惠。

    • 按量付费:短期使用ES实例,在程序研发或功能测试期间,建议选择按量付费(按小时付费)。优势是可随时释放实例,停止计费。

      您可以先创建按量付费的实例,确认实例符合要求后转包年包月。

    说明

    关于计费模式的更多信息,请参见计费方式

    地域和可用区

    根据业务情况选择地域,实例创建后地域不能更换:

    • 资源部署地域和用户的距离越近,网络时延越低,访问速度越快。

    • 如果ES实例需要与其他云产品实现内网互通,请将其部署在同一地域。

    可用区数量

    • 单可用区(默认):普通部署模式,适用于非关键任务型工作。

    • 两个可用区:跨可用区容灾部署模式,适用于生产型工作。

    • 三个可用区:高可用部署模式,适用于具有更高可用性要求的生产型工作。

    说明
    • 部署多可用区时,不需要您手动选择多个可用区,系统会自动配置对应个数的可用区。

    • 更多信息,请参见部署和使用跨可用区实例

    网络类型

    目前仅支持专有网络

    专有网络

    选择对应地域下的专有网络。

    说明
    • 如果ES实例需要与其他云产品实现内网互通,建议将其部署在同一专有网络下。

    • 如果没有符合业务需求的专有网络,请先创建专有网络。操作,请参见创建专有网络和交换机

    虚拟交换机

    列表中只显示指定专有网络下,与ES实例在同一可用区下的虚拟交换机。

    说明

    如果没有符合业务需求的虚拟交换机,请先创建交换机。操作,请参见创建专有网络和交换机

    实例类型

    • 内核增强版:在开源基础上提供深度优化的AliES内核引擎,提供10+增强特性。

    • 通用商业版:100%兼容开源Elasticsearch,免费提供全部X-pack高级特性。

    更多信息,请参见版本特性AliES内核增强版功能介绍

    Elasticsearch版本

    • 内核增强版:支持7.10、7.16和6.7版本。

    • 通用商业版:支持8.13、8.9、8.5、7.7、6.8、6.3、5.6和5.5版本。

    更多信息,请参见版本特性对比Release Note

    说明

    不同版本支持的地域和可用区可能存在一定差异,具体请以购买页为准。

    节点配置

    根据业务需要配置各节点。

    说明

    资源组

    通过资源组可以对ES实例进行分组管理。详细信息,请参见资源分组和授权

    登录名

    默认账号为elastic,不可更改。elastic账号可以用来访问ES实例和登录Kibana控制台。

    说明

    修改elastic账号的密码,在密码生效期间会影响服务访问,因此不建议在业务中直接使用elastic账号。如果程序中需要指定ES实例的账号和密码,建议在Kibana控制台创建具有相应权限的角色和用户。具体操作,请参见通过Elasticsearch X-Pack角色管理实现用户权限管控

    登录密码

    elastic账号对应的密码,不可为空。

    购买时长

    如果付费模式为包年包月,需要选择购买时长。

    建议您选中到期自动续费功能,避免资源到期实例停机或释放,影响正常使用。

    • 按月购买实例,自动续费周期为1个月。

    • 按年购买实例,自动续费周期为1年。

  3. 单击立即购买,进入确认订单页面,确认实例配置无误后,选中服务协议,单击立即开通

  4. Elasticsearch实例页面的顶部菜单栏,选择创建实例的地域,在实例列表中查看已创建的ES实例。

    实例创建后,需要一段时间才能生效。时间长短与您的集群规格、数据结构和大小等相关,一般在小时级别。您可以在实例列表的状态列,查看实例状态。

步骤二:通过Kibana访问实例

等待实例状态变为正常,即可执行以下步骤。

说明

您也可以通过curl命令和客户端方式访问实例。具体操作,请参见访问实例

  1. 在Elasticsearch实例列表中,单击目标实例ID。

  2. 在左侧导航栏,选择配置与管理 > 可视化控制

  3. 可选:Kibana区域,单击修改配置,配置Kibana的公网访问白名单,在IP白名单中加入您客户端的IP地址。具体操作,请参见配置Kibana公网或私网访问白名单

    首次从公网入口进入Kibana控制台且公网访问配置未修改时,系统会提示您修改配置,您可根据页面提示进行修改。

  4. 返回集群管理页面,在Kibana区域,单击公网入口

  5. 在登录页面输入账号和密码,单击登录。

    账号为elastic,密码为您创建实例时设置的密码。如果忘记可重置密码,具体操作请参见重置实例访问密码

  6. 在登录成功页面,单击自己浏览

  7. 单击Kibana页面左上角的image图标,选择Management > 开发工具(Dev Tools)。

  8. Console页签下,执行如下命令访问Elasticsearch实例。

    GET /

    访问成功后,结果如下。

    {
      "name": "es-cn-wuf3pxg630005****-data-h-0",
      "cluster_name": "es-cn-wuf3pxg63000****",
      "cluster_uuid": "1kaVmF46T2yOapAA6M****",
      "version": {
        "number": "8.9.1",
        "build_flavor": "default",
        "build_type": "docker",
        "build_hash": "652eb44fa71049c1fcdc08c967ef9f751d98****",
        "build_date": "2023-08-18T06:51:36.666651565Z",
        "build_snapshot": false,
        "lucene_version": "9.7.0",
        "minimum_wire_compatibility_version": "7.17.0",
        "minimum_index_compatibility_version": "7.0.0"
      },
      "tagline": "You Know, for Search"
    }                      

步骤三:创建索引

创建一个名称为product_info的索引:

7.0及以上版本

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
      "properties": {
        "productName": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        "annual_rate":{
          "type":"keyword"
        },
        "describe": {
          "type": "text",
          "analyzer": "ik_smart"
        }
    }
  }
}

7.0以下版本

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "products": {
      "properties": {
        "productName": {
          "type": "text",
          "analyzer": "ik_smart"
        },
        "annual_rate":{
          "type":"keyword"
        },
        "describe": {
         "type": "text",
         "analyzer": "ik_smart"
        }
      }
    }
  }
}
重要

官方Elasticsearch 7.0及以上版本将移除映射中的type类型定义,之前版本会继续支持。如果在7.0及以上版本中使用了type,会出现"type": "mapper_parsing_exception"的错误提示。详细信息及解决方案,请参见Removal of mapping types

以上示例创建了一个名称为product_info的索引。索引的类型为products(7.0及以上版本为_doc),并包含了productNameannual_ratedescribe字段。

创建成功后,返回结果如下。

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

步骤四:创建文档并插入数据

使用_bulk API,批量插入数据。

7.0以下版本

POST /product_info/products/_bulk
{"index":{}}
{"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品E","annual_rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"理财产品F","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

7.x版本

POST /product_info/_doc/_bulk
{"index":{}}
{"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品E","annual_rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"理财产品F","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

8.x版本

POST /product_info/_bulk
{"index":{}}
{"productName":"理财产品A","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"理财产品B","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品C","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"理财产品D","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"理财产品E","annual_rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"理财产品F","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

返回结果中包含"errors" : false,说明数据插入成功。

步骤五:搜索数据

重要

以下命令仅适用于Elasticsearch 7.0以下版本,7.x版本需要将products修改为_doc,8.x版本需要去掉products

  • 全文搜索

    搜索描述内容包含每天收益到账消息推送的所有产品。

    GET /product_info/products/_search
    {
      "query": {
        "match": {
          "describe": "每天收益到账消息推送"
        }
      }
    }

    搜索成功后,返回结果如下。

    {
      "took" : 21,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 6,
        "max_score" : 1.3968885,
        "hits" : [
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "WLvWYXAB8Rql5AUxLqUU",
            "_score" : 1.3968885,
            "_source" : {
              "productName" : "理财产品B",
              "annual_rate" : "3.1100%",
              "describe" : "90天定投产品,最低10000起投,每天收益到账消息推送"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "WrvWYXAB8Rql5AUxLqUU",
            "_score" : 1.3968885,
            "_source" : {
              "productName" : "理财产品D",
              "annual_rate" : "3.1200%",
              "describe" : "90天定投产品,最低12000起投,每天收益到账消息推送"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "WbvWYXAB8Rql5AUxLqUU",
            "_score" : 1.3547361,
            "_source" : {
              "productName" : "理财产品C",
              "annual_rate" : "3.3500%",
              "describe" : "270天定投产品,最低40000起投,每天收益立即到账消息推送"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "W7vWYXAB8Rql5AUxLqUU",
            "_score" : 1.1507283,
            "_source" : {
              "productName" : "理财产品E",
              "annual_rate" : "3.0100%",
              "describe" : "30天定投产品推荐,最低8000起投,每天收益会消息推送"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "XLvWYXAB8Rql5AUxLqUU",
            "_score" : 0.5753642,
            "_source" : {
              "productName" : "理财产品F",
              "annual_rate" : "2.7500%",
              "describe" : "热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "V7vWYXAB8Rql5AUxLqUU",
            "_score" : 0.31854028,
            "_source" : {
              "productName" : "理财产品A",
              "annual_rate" : "3.2200%",
              "describe" : "180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"
            }
          }
        ]
      }
    }
    说明

    阿里云Elasticsearch支持通过分词器搜索数据,同时也支持评分排序。在上文的返回结果中,前两条商品信息中都出现了每天收益到账消息推送,后两条商品信息中只出现了关键词消息推送,所以越靠前的搜索结果的匹配度越高,分数也越高。

  • 按查询条件搜索

    搜索年化率在3.0000%到3.1300%之间的产品。

    GET /product_info/products/_search
    {
      "query": {
        "range": {
          "annual_rate": {
            "gte": "3.0000%",
            "lte": "3.1300%"
          }
        }
      }
    }

    执行成功后,返回结果如下。

    {
      "took" : 10,
      "timed_out" : false,
      "_shards" : {
        "total" : 5,
        "successful" : 5,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : 2,
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "WLvWYXAB8Rql5AUxLqUU",
            "_score" : 1.0,
            "_source" : {
              "productName" : "理财产品B",
              "annual_rate" : "3.1100%",
              "describe" : "90天定投产品,最低10000起投,每天收益到账消息推送"
            }
          },
          {
            "_index" : "product_info",
            "_type" : "products",
            "_id" : "WrvWYXAB8Rql5AUxLqUU",
            "_score" : 1.0,
            "_source" : {
              "productName" : "理财产品D",
              "annual_rate" : "3.1200%",
              "describe" : "90天定投产品,最低12000起投,每天收益到账消息推送"
            }
          }
        ]
      }
    }
    说明

    Elasticsearch会根据条件搜索到符合预期的产品,同时以升序排列展示。

    更多搜索方式,请参见Query DSL

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

了解了阿里云Elasticsearch的使用方法后,您可以执行如下命令,删除对应索引,避免浪费资源。

警告

索引删除后不可恢复,请谨慎操作。

DELETE /product_info

删除成功后,返回如下结果。

{
  "acknowledged" : true
}

(可选)步骤七:释放实例

如果您不再需要按量付费的实例,可以将其释放。释放后,实例停止计费,数据不可恢复。

警告

实例释放后数据无法恢复,建议您在释放之前先备份数据。具体操作,请参见数据备份概述

  1. 在Elasticsearch实例列表中,选择目标实例操作列下的image > 释放实例

  2. 在弹出的对话框中,单击确认。

说明

退订不再需要继续使用的包年包月的阿里云ES实例,请参见退订和退款说明

后续步骤