本文指引您快速创建一个阿里云Elasticsearch实例,并访问该实例,使用Restful API完成创建索引、创建文档并插入数据、搜索数据、删除索引等操作。
前提条件
- 注册阿里云账号。
具体操作,请参见账号注册。
- 创建专有网络和虚拟交换机。
具体操作,请参见搭建IPv4专有网络。
- 完成规格容量评估。
具体操作,请参见规格容量评估。
场景说明
某金融服务企业通过线上平台管理理财项目,之前使用传统数据库为客户提供理财产品的搜索功能。由于收益信用良好,得到了不少客户的青睐,但随之而来的是业务体系逐步扩大,客户信息也逐步增加,使得传统型数据库的缺陷越来越明显。为了改善搜索响应迟缓、精准性无法保障、数据服务设备性能降低等状况,该企业引入了阿里云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起投,通过短信提示获取收益消息"}
]
}
操作流程
- 步骤一:创建实例创建一个阿里云Elasticsearch 6.7通用商业版实例。
- 步骤二:访问实例等待实例状态正常后,通过Kibana访问阿里云Elasticsearch实例。
- 步骤三:创建索引通过Restful API完成索引创建。
- 步骤四:创建文档并插入数据通过Restful API在文档中批量插入数据。
- 步骤五:搜索数据通过Restful API完成全文数据搜索和按查询条件搜索。
- (可选)步骤六:删除索引如果不再使用索引,可以通过命令删除对应索引,避免浪费资源。
- (可选)步骤七:释放实例如果不再需要实例,可以释放实例。实例释放后数据无法恢复,建议释放实例前先备份数据。
操作视频
步骤一:创建实例
步骤二:访问实例
等待实例状态变为正常,即可执行以下步骤,通过Kibana访问实例。
说明 您也可以通过curl命令和客户端方式访问实例。具体操作,请参见访问实例。
- 在Elasticsearch实例列表中,单击目标实例ID。
- 在左侧导航栏,选择 。
- 可选:在Kibana区域,单击修改配置,配置Kibana的公网访问白名单,在IP白名单中加入您客户端的IP地址。首次从公网入口进入Kibana控制台且公网访问配置未修改时,系统会提示您修改配置,您可根据页面提示进行修改。具体操作,请参见配置Kibana公网或私网访问白名单。
- 返回集群管理页面,在Kibana区域,单击公网入口。
- 在登录页面输入账号和密码,单击登录。账号为elastic,密码为您创建实例时设置的密码。如果忘记可重置,重置密码的具体操作和注意事项,请参见重置实例访问密码。
- 在登录成功页面,单击Explore on my own。
- 在左侧导航栏,单击Dev Tools(开发工具),再单击Go to work。说明 本文操作以Elasticsearch 6.7版本的Kibana控制台为例,其他版本操作可能略有差别,请以实际页面为准。
- 在Console页签下,执行如下命令访问Elasticsearch实例。
GET /
访问成功后,结果如下。{ "name" : "tgeAvZe", "cluster_name" : "es-cn-nif1z64qj003g****", "cluster_uuid" : "IZmmd9IGTmKzqiZiyz****", "version" : { "number" : "6.7.0", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "c9c0c3a", "build_date" : "2020-12-01T08:00:27.556078Z", "build_snapshot" : false, "lucene_version" : "7.7.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
步骤三:创建索引
创建一个名称为product_info的索引:
- 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" } } } } }
- 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" } } } }
重要 官方Elasticsearch 7.0及以上版本将移除映射中的type类型定义,之前版本会继续支持。如果在7.0及以上版本中使用了type,会出现"type": "mapper_parsing_exception"
的错误提示。详细信息及解决方案,请参见Removal of mapping types。
以上示例创建了一个名称为product_info的索引。索引的类型为products(7.0及以上版本为_doc),并包含了productName、annual_rate和describe字段。
创建成功后,返回结果如下。
{
"acknowledged" : true,
"shards_acknowledged" : true,
"index" : "product_info"
}
步骤四:创建文档并插入数据
使用_bulk API,批量插入数据。
重要 以下命令仅适用于Elasticsearch 7.0以下版本,7.x版本需要将products修改为_doc,8.x版本需要去掉products。
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起投,通过短信提示获取收益消息"}
如果返回结果中包含"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
}
(可选)步骤七:释放实例
如果您不再需要实例,可以将其释放。释放后,实例停止计费,数据不可恢复。释放操作只适用于按量付费实例。
警告 实例释放后数据无法恢复,建议您在释放之前先备份数据。具体操作,请参见数据备份概述。
- 在Elasticsearch实例列表中,选择目标实例操作列下的 。
- 在弹出的对话框中,单击确认。