华为云用户手册

  • 规划集群版本 选择OpenSearch集群版本时,建议综合考虑业务需求、特性支持、性能改进、安全性更新和长期支持等因素,以确保选择的版本能够满足当前和未来的业务发展,同时提供稳定和安全的运行环境。 表3 集群版本支持情况 特性 OpenSearch 1.3.6 OpenSearch 2.17.1 相关文档 向量检索 √ x 配置OpenSearch集群向量检索 存算分离 √ x 配置OpenSearch集群存算分离 切换冷热数据 √ √ 切换OpenSearch集群冷热数据 导入性能增强 √ x 增强OpenSearch集群数据导入性能
  • 访问方式 表1 集群的访问方式 访问方式 适用场景 相关文档 OpenSearch Dashboards(推荐方式) 图形化操作与展示。 监控实例。 管理数据。 不限制访问语言。 通过OpenSearch Dashboards登录OpenSearch集群 Cerebro 通过Cerebro登录OpenSearch集群 开源OpenSearch API 通过Curl命令访问与管理OpenSearch集群。 通过Curl命令行接入OpenSearch集群 LDAP认证 在OpenSearch集群中配置轻量目录访问协议LDAP认证,实现相应角色的LDAP用户接入OpenSearch集群。 通过LDAP接入OpenSearch集群
  • SQL使用示例 在OpenSearch Dashboard中使用SQL语言搜索数据(推荐) 在OpenSearch Dashboard的DevTools中将请求发送到“_plugins/_sql”,可以使用请求参数或请求正文。 例如,执行如下命令,从“my-index”索引中搜索出50条数据。 1 2 3 4 POST _plugins/_sql { "query": "SELECT * FROM my-index LIMIT 50" } 默认情况下,查询结果返回的是JSON格式的数据。当需要返回 CS V格式的数据时,则需要在命令中对format参数进行如下设置: 1 2 3 4 POST _plugins/_sql?format=csv { "query": "SELECT * FROM my-index LIMIT 50" } 查询结果返回CSV格式的数据时,每行对应一个文档,每列对应一个字段。 在ECS中使用Curl命令执行SQL搜索数据 例如,执行如下命令,从“kibana_sample_data_flights”索引中搜索出10条数据。 curl -XPOST https://localhost:9200/_opendistro/_sql -u username:password -k -d '{"query": "SELECT * FROM kibana_sample_data_flights LIMIT 10"}' -H 'Content-Type: application/json' localhost表示集群的访问地址,username和password分别表示安全模式集群的用户名和密码。
  • 查询存储冷数据的OBS实时速率 仅2023年2月之后创建的、版本为7.6.2或7.10.2的Elasticsearch集群才支持查询存储冷数据的OBS实时速率。 为了更清晰的了解到存算分离的插件在OBS中的使用情况, CSS 服务新增了OBS实时速率的统计接口,并且将实时速率记录到系统索引“.freeze_obs_rate-YYYY.mm.dd”中。 OBS实时速率的计算方式:每5秒计算一次,查询前5秒内的平均OBS操作速率。 系统索引“.freeze_obs_rate-YYYY.mm.dd”用于存放OBS操作实时速率和OBS操作数据,便于了解存储冷数据的OBS的操作趋势。该索引的默认保留时间是30天。 查询存储冷数据的OBS实时速率。 执行如下命令,查询所有节点中存储冷数据的OBS实时速率。 GET _frozen_stats/obs_rate 执行如下命令,查询指定节点中存储冷数据的OBS实时速率。 GET _frozen_stats/obs_rate/{nodeId} “{nodeId}”为节点ID。 响应示例: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "elasticsearch", "nodes" : { "dflDvcSwTJ-fkiIlT2zE3A" : { "name" : "node-1", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1", "update_time" : 1671777600482, // 当前统计值的更新时间。 "obs_rate" : { "list_op_rate" : 0.0, // obs list操作的速率,单位:次/秒。 "get_meta_op_rate" : 0.0, // obs get meta操作的速率,单位:次/秒。 "get_obj_op_rate" : 0.0, // obs get操作的速率,单位:次/秒。 "put_op_rate" : 0.0, // obs put操作的速率,单位:次/秒。 "obs_total_op_rate" : 0.0, // obs所有操作的速率,单位:次/秒。 "obs_upload_rate" : "0.0 MB/s", // obs上传数据的速率,MB/秒。 "obs_download_rate" : "0.0 MB/s" // obs下载数据的速率,MB/秒。 } } } } 修改存储OBS实时速率的索引“.freeze_obs_rate-YYYY.mm.dd”的保留时间。索引的默认保留时间是30天。 执行如下命令,将索引保留时间改成7天。 PUT _cluster/settings { "persistent": { "low_cost.obs_rate_index.evict_time": "7d" } } 表17 配置项说明 配置项 类型 scope 是否可动态修改 说明 low_cost.obs_rate_index.evict_time String node 是 用于控制索引“.freeze_obs_rate-YYYY.mm.dd”的保留时间。 取值范围:1d~365d。 默认值:30d。 单位:天。
  • 归档已冻结的索引 只有集群版本是Elasticsearch 7.10.2、镜像版本大于等于24.3.0.C001的集群才支持归档索引。 只有已冻结且处于closed状态的索引才支持归档索引。 索引归档后,直接打开索引会超时并导致索引red,需要先恢复归档索引,将索引数据的存储类别从归档存储转换标准存储,等待自动打开。 执行归档索引命令,转换OBS中已冻结的索引数据的存储类别,从标准存储转换成归档存储。 POST {index_name}/_freeze_archive 表8 请求参数说明 参数名 说明 index_name 需要归档的索引名称。 返回结果如下: { "task_uuid" : "XJTn3hsHSaCjPnvIgv-FFw" } 表9 返回参数说明 参数名 说明 task_uuid 归档索引的任务ID,在提交归档请求后会启动一个异步任务,请求返回任务ID,使用该ID可以查询归档索引任务的进度。
  • 恢复已归档的索引 执行以下命令,转换OBS中已归档的索引数据的存储类别,从归档存储转换标准存储。恢复后的归档索引会自动被open,此时索引在恢复有效期内可以被正常检索到。 POST {index_name}/_freeze_archive_restore { "days": 1, "tier": "EXPEDITED" } 表10 请求参数说明 参数名 说明 index_name 需要恢复的索引名称。 days 恢复归档索引后,会对该索引下的文件对象生成一个对象的标准存储副本,此参数指定恢复有效期,即标准存储副本的保存时间,在超出了恢复有效期后,索引下的文件对象会再次转换成归档存储,并且索引会在超出恢复有效期前被close。 取值范围:1~30 默认值:1 单位: 天 tier 恢复类型,可选值为EXPEDITED、STANDARD,两者的计费会有差异。 EXPEDITED:快速恢复,恢复耗时5分钟,索引会在恢复完成以后被自动打开。 STANDARD:标准恢复,恢复耗时5小时,索引会在恢复完成以后被自动打开。 默认值:EXPEDITED 返回结果如下: { "task_uuid" : "FA2a5hWgQ66MQ7ENCFKjCg" } 表11 返回参数说明 参数名 说明 task_uuid 恢复索引的任务ID,在提交恢复请求后会启动一个异步任务,请求返回任务ID,使用该ID可以查询恢复索引任务的进度。
  • 提升冷数据的查询性能 仅2023年2月之后创建的、版本为7.6.2或7.10.2的Elasticsearch集群才支持提升冷数据的查询性能。 在Kibana的Discover页面首次查询冷数据时,由于此时无任何缓存,导致所有数据均需要从OBS上获取,当命中的数据较多时,需要耗费大量的时间从OBS上获取对应的时间字段以及文件元数据。如果将这一部分数据直接缓存在本地,即可大幅提升查询性能,解决Discover页面首次查询慢的问题。 云搜索服务 就是通过冷数据的本地缓存,实现冷数据的查询性能提升。本地缓存配置是预置的,用户可以基于业务场景修改配置,也可以查询、了解本地缓存信息。 修改冷数据的本地缓存配置。 表16 本地缓存配置项说明 配置项 类型 scope 是否可动态修改 说明 low_cost.local_cache.max.capacity Integer node 是 节点上,能够打开的冷数据缓存的最大数量。(每个shard对应一个缓存对象) 取值范围:10~5000 默认值:500 说明: 当堆内存使用率一直很高时,可以尝试降低该值。 当查询冷数据本地缓存的相关统计指标中load_overflow_count数值一直持续快速增加时,建议调大该值。 index.low_cost.local_cache.threshold Integer index 是 启用冷数据本地缓存的阈值。 当date类型字段的占比小于此值时,启用冷数据本地缓存date类型字段。否则不使用。 如果当前索引的date类型字段占据当前索引的绝大部分数据量,则不建议使用此功能。 单位:% 取值范围:0~100 默认值:50 index.low_cost.local_cache.evict_time 字符串 index 是 冷数据的本地缓存的淘汰时间,当缓存时间大于该值,缓存将被删除。根据index.frozen_date(冻结成功的时间)判定,当索引无index.frozen_date时,则根据索引创建时间判定。 单位:天 取值范围:1d~365d 默认值:30d 说明: 建议根据磁盘用量调整淘汰时长,节省磁盘空间。 执行如下命令,修改“low_cost.local_cache.max.capacity”。 PUT _cluster/settings { "persistent": { "low_cost.local_cache.max.capacity":1000 } } 执行如下命令,修改“index.low_cost.local_cache.threshold”。 PUT es_write_pref2-00000000021/_settings { "index.low_cost.local_cache.threshold":20 } 执行如下命令,修改“index.low_cost.local_cache.evict_time”。 PUT es_write_pref2-00000000021/_settings { "index.low_cost.local_cache.evict_time":"7d" } 查询冷数据的本地缓存信息。 执行如下命令,查询所有节点中冷数据的本地缓存相关指标。 GET /_frozen_stats/local_cache 执行如下命令,查询指定节点中冷数据的本地缓存相关指标。 GET /_frozen_stats/local_cache/{nodeId} “{nodeId}”为节点ID。 返回结果如下: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "elasticsearch", "nodes" : { "6by3lPy1R3m55Dcq3liK8Q" : { "name" : "node-1", "transport_address" : "127.0.0.1:9300", "host" : "127.0.0.1", "ip" : "127.0.0.1", "local_cache" : { "get_stats" : { "get_total_count" : 562, //从冷数据本地缓存查询数据的总次数 "get_hit_count" : 562, //从冷数据本地缓存查询数据命中的次数 "get_miss_count" : 0, //从冷数据本地缓存查询数据未命中的次数 "get_total_ns" : 43849200, //从冷数据本地缓存查询数据的总时长 "get_avg_ns" : 78023 //从冷数据本地缓存查询数据的平均时长 }, "load_stats" : { "load_count" : 2, //加载冷数据本地缓存的次数 "load_total_ms" : 29, //加载冷数据本地缓存的总时长 "load_avg_ms" : 14, //加载冷数据本地缓存的平均时长 "load_fail_count" : 0, //加载冷数据本地缓存的失败次数 "load_overflow_count" : 0 //加载冷数据本地缓存时超过缓存池的次数 }, "reload_stats" : { "reload_count" : 0, //重新生成冷数据本地缓存的次数 "reload_total_ms" : 0, //重新生成冷数据本地缓存的总时长 "reload_avg_ms" : 0, //重新生成冷数据本地缓存的平均时长 "reload_fail_count" : 0 //重新生成冷数据本地缓存的失败次数 }, "init_stats" : { "init_count" : 0, //初始化冷数据本地缓存的次数 "init_total_ms" : 0, //初始化冷数据本地缓存的总时长 "init_avg_ms" : 0, //初始化冷数据本地缓存的平均时长 "init_fail_count" : 0 //初始化冷数据本地缓存的失败次数 } } } } }
  • 基于归档状态查询索引列表 执行以下命令,基于归档状态查询索引列表。 GET _cat/archive_indices?stage={STAGE} 表13 请求参数说明 参数名 说明 STAGE 索引的归档状态,可选值如下: ARCHIVE_INIT:已接收到归档任务,尚未开始 ARCHIVE_STARTED: 归档任务已开始 ARCHIVE_PARTIAL: 归档任务部分成功 ARCHIVE_DONE: 归档任务成功结束 ARCHIVE_FAILURE: 归档任务失败 RESTORE_INIT: 已接收到恢复归档任务,尚未开始 RESTORE_STARTED: 恢复归档任务已开始 RESTORE_PARTIAL: 恢复归档任务部分成功 RESTORE_DONE: 恢复归档任务成功,此时的索引文件恢复仍需要一定的时间,由 RESTORE_FAILURE: 恢复归档任务失败 RESTORE_OPENED: 索引恢复归档任务已完成,索引已打开 RESTORE_CLOSED: 索引的归档的数据已经到达恢复有效期,索引已关闭 返回结果如下: health status index uuid pri rep docs.count docs.deleted store.size pri.store.size close log-105 M0uRAWj_SKydjg0dFzyJow 此命令的参数和返回值与开源Elasticsearch的_cat/indices一致。
  • 基于冻结状态查询索引列表 执行如下命令,基于冻结状态查询索引列表。 GET _cat/freeze_indices?stage=${STAGE} 表7 请求参数说明 参数名 说明 STAGE 索引的冻结状态,可选值如下: start:开始冻结但是还未完成的索引列表 done: 已经完成冻结的索引列表 unfreeze:没有冻结的索引列表 空或者其他值:正在冻结过程中或者已经冻结完成的所有索引列表 返回结果如下: green open data2 0bNtxWDtRbOSkS4JYaUgMQ 3 0 5 0 7.9kb 7.9kb green open data3 oYMLvw31QnyasqUNuyP6RA 3 0 51 0 23.5kb 23.5kb 此命令的参数和返回值与开源Elasticsearch的_cat/indices一致。
  • 查看归档索引任务 执行以下命令,查看归档索引任务、恢复归档索引任务的状态。 GET _freeze_archive_progress/{task_uuid} 表12 请求参数说明 参数名 说明 task_uuid 归档索引任务或恢复归档索引任务的ID,该ID由归档已冻结索引任务或恢复已归档索引任务时获取。 返回结果如下: { "id" : "archive:XJTn3hsHSaCjPnvIgv-FFw", "indices" : [ { "index_name" : "log-1017", // 索引名字 "index_uuid" : "HXjhvo9QTwSvjzGBBZBCTw" // 索引ID } ], "stage" : "ARCHIVE_DONE", // 当前状态 "type" : "archive", // 类型,可能为archive(归档)或restore(恢复归档) "node" : "css-d0e8-ess-esn-1-1", // 执行任务的节点名 "start" : 1729222604074, // 开始时间 "time_in_millis" : 788, // 总耗时 "files" : { "total" : 30, // 总文件数 "success" : 30, // 成功文件数 "incremental" : 0, // 多次执行时,部分文件可能已经处于归档状态,此字段标识这样的文件个数 "bytes" : 0, // 所有文件字节数,只有恢复归档索引时才会有该值 "fail" : 0 // 失败文件数 } }
  • 查询存储在OBS中冷数据的缓存状态 冻结索引之后,当冷数据第一次被查询时,系统会自动进行数据缓存,集群支持查询存储在OBS中冷数据的缓存状态。当需要调试集群性能时,也可以重置缓存状态。 查询节点中存储在OBS中冷数据的缓存状态。 执行如下命令,查询所有节点中冷数据的缓存信息。 GET _frozen_stats 执行如下命令,查询指定节点中冷数据的缓存信息。 GET _frozen_stats/${node_id} 表15 请求参数说明 参数名 说明 node_id 节点ID。 返回结果如下: { "_nodes" : { "total" : 3, // 所有节点数量 "successful" : 3, // 成功的节点数量 "failed" : 0 // 失败的节点数量 }, "cluster_name" : "css-zzz1", // 集群名称 "nodes" : { "7uwKO38RRoaON37YsXhCYw" : { "name" : "css-zzz1-ess-esn-2-1", // 节点名称 "transport_address" : "10.0.0.247:9300", // 节点transport连接地址 "host" : "10.0.0.247", // 节点host "ip" : "10.0.0.247", // 节点IP "block_cache" : { "default" : { "type" : "memory", // cache类型,memory表示内存cache "block_cache_capacity" : 8192, // cache容量 "block_cache_blocksize" : 8192, // cache中单个block大小,单位为bytes,如此处表示8k "block_cache_size" : 12, // cache已被占用的大小 "block_cache_hit" : 14, // cache命中数 "block_cache_miss" : 0, // cache未命中数 "block_cache_eviction" : 0, // cache被逐出次数 "block_cache_store_fail" : 0 // 如果cache满了,可能导致新的cache存储失败,此处表示存储失败的次数 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, // 调用OBS list接口的次数 "obs_list_ms" : 265, // 调用OBS list接口的总耗时 "obs_list_avg_ms" : 15 // 调用OBS list接口的平均耗时 }, "get_meta" : { "obs_get_meta_count" : 79, // 调用OBS 获取元数据接口的次数 "obs_get_meta_ms" : 183, // 调用OBS 获取元数据接口的总耗时 "obs_get_meta_avg_ms" : 2 // 调用OBS 获取元数据接口的平均耗时 }, "get_obj" : { "obs_get_obj_count" : 12, // 调用OBS getObject接口的次数 "obs_get_obj_ms" : 123, // 调用OBS getObject接口的总耗时 "obs_get_obj_avg_ms" : 10 // 调用OBS getObject接口的平均耗时 }, "put_obj" : { "obs_put_obj_count" : 12, // 调用OBS putObject接口的总次数 "obs_put_obj_ms" : 2451, // 调用OBS putObject接口的总耗时 "obs_put_obj_avg_ms" : 204 // 调用OBS putObject接口的平均耗时 }, "obs_op_total" : { "obs_op_total_ms" : 3022, // 调用OBS接口的总耗时 "obs_op_total_count" : 120, // 调用OBS接口的总次数 "obs_op_avg_ms" : 25 // 调用OBS接口的平均耗时 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 291194714, "eviction_count" : 0 } }, "73EDpEqoQES749umJqxOzQ" : { "name" : "css-zzz1-ess-esn-3-1", "transport_address" : "10.0.0.201:9300", "host" : "10.0.0.201", "ip" : "10.0.0.201", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 309, "obs_list_avg_ms" : 18 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 216, "obs_get_meta_avg_ms" : 2 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 140, "obs_get_obj_avg_ms" : 11 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 1081, "obs_put_obj_avg_ms" : 90 }, "obs_op_total" : { "obs_op_total_ms" : 1746, "obs_op_total_count" : 120, "obs_op_avg_ms" : 14 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 367179751, "eviction_count" : 0 } }, "EF8WoLCUQbqJl1Pkqo9-OA" : { "name" : "css-zzz1-ess-esn-1-1", "transport_address" : "10.0.0.18:9300", "host" : "10.0.0.18", "ip" : "10.0.0.18", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 220, "obs_list_avg_ms" : 12 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 139, "obs_get_meta_avg_ms" : 1 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 82, "obs_get_obj_avg_ms" : 6 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 879, "obs_put_obj_avg_ms" : 73 }, "obs_op_total" : { "obs_op_total_ms" : 1320, "obs_op_total_count" : 120, "obs_op_avg_ms" : 11 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 235706838, "eviction_count" : 0 } } } } 执行如下命令,可以重置缓存状态。 POST _frozen_stats/reset 此命令主要用于调试性能问题,例如重置缓存状态后再次执行查询可以清晰看到本次查询的缓存命令情况。在业务运行阶段不需要执行此命令。 返回结果如下: { "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "Es-0325-007_01", "nodes" : { "mqTdk2YRSPyOSXfesREFSg" : { "result" : "ok" } } }
  • 约束限制 Elasticsearch集群仅7.6.2和7.10.2版本支持存算分离功能。其中,归档索引只有集群版本是Elasticsearch 7.10.2、镜像版本大于等于24.3.0.C001的集群才支持。 在执行冻结索引前,系统会将待冻结的索引配置为只读状态,即便在索引数据转储到OBS后,索引也是只读状态,不支持写入数据。 在冻结索引过程中,查询请求不受影响。在冻结完成后,会将索引先Close再Open,在这段时间内,索引不可查询,集群可能短暂出现Red状态,索引Open结束后集群恢复正常。 将历史索引数据转储到OBS的过程中会占用网络带宽。 冻结索引后,索引会被转储到OBS中,同时本地磁盘中的索引数据会被删除。当查询被冻结的索引时,时延会增加,在聚合时,由于查询复杂、数据读取多,时延变长会更明显。 已转储到OBS中的索引不支持解冻,即不可回退为可写的索引。 在配置了读写分离的集群中,从集群无法对由主集群同步过来的索引数据设置存算分离。 由于存算分离的特性依赖OBS,所以使用过程中要遵守OBS的“带宽”和“每秒请求数(QPS)”的使用限制,详细请参见OBS使用限制。当超过限制时,集群中涉及到OBS查询的性能都会下降,例如恢复分片的速度变慢、查询数据时变慢等。
  • 冻结索引 执行如下命令,将指定索引转储到OBS中,存储类别为标准存储。 POST ${index_name}/_freeze_low_cost 表1 请求参数说明 参数名 说明 index_name 需要冻结的索引名称。 返回结果如下: { "freeze_uuid": "pdsRgUtSTymVDWR_HoTGFw" } 表2 返回参数说明 参数名 说明 freeze_uuid 冻结索引任务的ID,在提交冻结请求后会启动一个异步任务,请求返回任务ID,使用该ID可以查询冻结索引任务的进度。
  • 查看冻结索引任务 执行如下命令,查看冻结索引任务的进度。 GET _freeze_low_cost_progress/${freeze_uuid} 表3 请求参数说明 参数名 说明 freeze_uuid 冻结索引任务的ID,该ID由冻结索引时获取。 返回结果如下: { "stage" : "STARTED", "shards_stats" : { "INIT" : 0, "FAILURE" : 0, "DONE" : 0, "STARTED" : 3, "ABORTED" : 0 }, "indices" : { "data1" : [ { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 2 }, "start_ms" : 1611972010852, "end_ms" : -1, "total_time" : "10.5s", "total_time_in_millis" : 10505, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3211446689, "finished_bytes" : 222491269, "percent" : "6.0%" }, "file" : { "total_files" : 271, "finished_files" : 12, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 1, "paused_nanos" : 946460970 } }, { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 0 }, "start_ms" : 1611972010998, "end_ms" : -1, "total_time" : "10.3s", "total_time_in_millis" : 10359, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3221418186, "finished_bytes" : 272347118, "percent" : "8.0%" }, "file" : { "total_files" : 372, "finished_files" : 16, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 5, "paused_nanos" : 8269016764 } }, { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 1 }, "start_ms" : 1611972011021, "end_ms" : -1, "total_time" : "10.3s", "total_time_in_millis" : 10336, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3220787498, "finished_bytes" : 305789614, "percent" : "9.0%" }, "file" : { "total_files" : 323, "finished_files" : 14, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 3, "paused_nanos" : 6057933087 } } ] } } 表4 返回参数说明 参数名 说明 stage 当前所处状态。取值包括: INIT:刚启动或者正在初始化。 FAILURE:失败。 DONE:完成。 STARTED:已启动。 ABORTED:取消,预留字段。 shards_stats 处在各个状态的shard个数。 indices 每个索引的状态详情。 表5 indices返回值说明 参数名 说明 uuid freeze的uuid。 index 索引信息和shard信息。 start_ms 开始时间。 end_ms 结束时间,如果没有结束则显示为-1。 total_time 已花费时间。 total_time_in_millis 已花费时间毫秒数。 stage 当前shard所处的状态。 failure 失败原因,如果没有失败则显示为null。 size.total_bytes 总共需要冻结的文件的字节数。 size.finished_bytes 已经完成冻结的字节数。 size.percent 已经完成冻结的字节数百分比。 file.total_bytes 总共需要冻结的文件个数。 file.finished_bytes 已经完成冻结的文件个数。 file.percent 已经完成冻结的文件个数百分比。 rate_limit.paused_times 达到限速导致冻结暂停的次数。 rate_limit.paused_nanos 达到限速导致冻结暂停的时间纳秒数。 冻结完成的索引会增加以下settings,可参考表6。 表6 冻结索引settings 参数 说明 index.frozen_low_cost 标识该索引为冻结索引。取值为true。 index.blocks.write 冻结后的索引禁止写入。取值为true。 index.store.type 标识该索引的存储类型为obs。取值为obs。
  • 场景描述 存算分离是通过冻结索引将历史数据转储到OBS,以此降低数据的存储成本。 对于有海量数据写入和存储的场景,数据有明显的冷热区分,新写入的数据一般属于热数据,存储在SSD中方便快速被搜索,随着时间的推移,历史数据不再写入,查询QPS也降低,这时候历史数据就算冷数据,通过存算分离将冷数据转储到OBS,热数据依旧存放在SSD中,方便快速搜索。 图1 存算分离 通过存算分离可以实现索引数据的生命周期管理。 热状态的索引数据支持写入,且可以实现毫秒级检索。 冻结状态的索引数据,是指将长期不使用的历史数据转储到CSS服务的OBS桶中(该OBS桶用户无感知,且无法在OBS控制台查看,但存储在OBS桶中的资源需要额外收费),降低数据的存储成本,提升SSD的存储能力。此时,被冻结的索引数据的检索速率会降低到秒/分级别。 当确定OBS中的历史数据不再使用时,可以关闭索引数据,此状态的索引数据将无法被检索到。 OBS中被关闭的索引数据,可以通过转换OBS的存储类别,从标准存储转换成归档存储,进一步降低历史数据的存储成本。 已归档的索引默认不可被检索,但是可以通过恢复归档索引,使索引在恢复有限期内可以被正常检索。 OBS中的归档存储的索引数据支持定期删除,释放存储资源。 本文通过Kibana访问集群,介绍如何使用存算分离。
  • 通过内网地址访问OpenSearch Dashboards登录OpenSearch集群 同一VPC下的服务器才能通过OpenSearch集群的内网访问地址访问OpenSearch Dashboards。 登录 云搜索 服务管理控制台。 在OpenSearch集群管理页面,单击集群名称,进入集群基本信息页面。 在集群基本信息页面,获取集群的内网访问地址。 图2 获取内网地址 将集群的内网访问地址的端口号从“9200”改为“5601”,即为OpenSearch Dashboards的内网地址。例如,集群的“内网访问IPv4地址”是“192.168.0.***:9200”,则OpenSearch Dashboards的内网地址为“192.168.0.***:5601”。 在服务器中,输入OpenSearch Dashboards的内网地址即可进入OpenSearch Dashboards登录界面。 非安全模式的集群:将直接进入OpenSearch Dashboards操作界面。 安全模式的集群:需要在登录页面输入用户名和密码,单击“Log In”进入OpenSearch Dashboards操作界面。用户名默认为admin,密码为创建集群时设置的管理员密码。 登录成功后,可在OpenSearch Dashboards界面进行相关操作访问OpenSearch集群。
  • 通过公网地址访问OpenSearch Dashboards登录OpenSearch集群 仅安全模式的集群支持通过Kibana公网访问地址访问OpenSearch Dashboards。 Kibana公网访问配置的白名单依赖ELB的白名单能力。更新白名单后,白名单对新建的连接是实时生效的,但对于已存在的长连接,可能会出现去掉的白名单IP地址还能访问OpenSearch Dashboards的场景,这是因为要等长连接断开后才生效,预计1分钟左右。 当关闭Kibana公网访问后再重新打开,Kibana的公网地址可能会发生变化,请谨慎操作。 登录云搜索服务管理控制台。 开启OpenSearch集群的Kibana公网访问。支持在创建集群的时候就配置Kibana公网访问,或者在集群创建完之后再开启Kibana公网访问。 在创建集群时配置Kibana公网访问:操作指导请参见创建OpenSearch集群。 集群创建完之后再开启Kibana公网访问: 在集群管理页面,单击需要配置Kibana公网访问的集群名称,进入集群基本信息页面。 左侧菜单栏选择“Kibana公网访问”,在“Kibana公网访问”右侧单击开关,打开Kibana公网访问功能。 在开启Kibana公网访问页面,配置相关参数。如果集群已配置Kibana公网访问,此时也支持修改相关配置。 表2 配置Kibana公网访问 参数 说明 带宽 设置公网访问的带宽。 取值范围:1-100。 单位:Mbit/s。 访问控制开关 如果关闭访问控制开关,则允许任何IP通过公网IP访问集群Kibana。如果开启访问控制开关,则只允许白名单列表中的IP通过公网IP访问集群Kibana。 白名单 设置允许访问的IP地址或网段,中间用英文逗号隔开。仅当打开“访问控制开关”时才需要配置。 建议开启白名单。 说明: Kibana公网访问配置的白名单依赖ELB的白名单能力。更新白名单后,白名单对新建的连接是实时生效的,但对于已存在的长连接,可能会出现去掉的白名单IP地址还能访问Kibana的场景,这是因为要等长连接断开后才生效,预计1分钟左右。 配置完成后,单击“确定”。 待集群的Kibana公网访问开通以后,在Kibana公网访问页面获取“kibana公网访问地址”。 图1 获取Kibana公网访问地址 在浏览器中,输入“kibana公网访问地址”即可进入OpenSearch Dashboards登录界面。 在登录页面输入用户名和密码,单击“Log In”进入OpenSearch Dashboards操作界面。用户名默认为admin,密码为创建集群时设置的管理员密码。 登录成功后,可在OpenSearch Dashboards界面进行相关操作访问OpenSearch集群。
  • 通过控制台访问OpenSearch Dashboards登录OpenSearch集群 登录云搜索服务管理控制台。 在“集群管理”页面选择需要登录的集群,单击“操作”列中的“Kibana”进入OpenSearch Dashboards登录界面。 非安全模式的集群:将直接进入OpenSearch Dashboards操作界面。 安全模式的集群:需要在登录页面输入用户名和密码,单击“Log In”进入OpenSearch Dashboards操作界面。用户名默认为admin,密码为创建集群时设置的管理员密码。 登录成功后,可在OpenSearch Dashboards界面进行相关操作访问集群。
  • 入门实践 云搜索服务为您提供各种业务场景、方案架构的最佳实践,方便您根据自身的业务场景选择合适的实践方案。 表1 常用最佳实践 实践场景 描述 数据迁移 通过华为云Logstash实现Elasticsearch集群间数据迁移 华为云Logstash是一款全托管的数据接入处理服务,兼容开源Logstash的能力,支持用于Elasticsearch集群间数据迁移。通过华为云Logstash可以实现华为云Elasticsearch、自建Elasticsearch或第三方Elasticsearch迁移至华为云Elasticsearch。 通过备份与恢复实现Elasticsearch集群间数据迁移 通过备份与恢复实现华为云Elasticsearch集群间数据迁移:仅适用于源集群和目标集群都是CSS服务的集群,且依赖 对象存储服务 OBS。 通过S3插件备份与恢复迁移自建Elasticsearch集群至华为云:通过S3插件可以实现自建Elasticsearch集群和华为云Elasticsearch集群之间的数据迁移。 通过备份与恢复迁移第三方Elasticsearch集群至华为云:适用于第三方Elasticsearch集群和华为云Elasticsearch集群之间的数据迁移,依赖存储仓库。 通过读写分离插件实现华为云Elasticsearch集群间数据迁移 通过CSS服务的读写分离插件可以实现Elasticsearch集群间的索引数据近实时同步,仅适用于源集群和目标集群都是CSS服务的集群。 通过 CDM 服务实现Elasticsearch集群间数据迁移 Elasticsearch整库迁移到云搜索服务:通过华为云提供的云迁移工具CDM,实现不同云服务间的集群迁移能力。 华为云Elasticsearch集群迁移至OpenSearch集群 升级Elasticsearch集群版本:通过CSS服务的跨引擎升级功能进行数据迁移,适用于CSS服务的Elasticsearch 7.10.2升级至OpenSearch 1.3.6。 数据库数据迁移至Elasticsearch集群 使用DRS从数据库导入数据至Elasticsearch:适用于将MySQL数据库中的数据同步到Elasticsearch集群中。一般用于集群间的数据增量迁移,在数据同步后集群随时可割接,较其他增量迁移更加方便灵活。 接入集群 Elasticsearch集群访问方式 Elasticsearch集群提供多种访问方式,包括Kibana、Cerebro、Curl命令、Java客户端、Python客户端、Go客户端和 MRS Hive客户端。 OpenSearch集群访问方式 OpenSearch集群提供多种访问方式,包括Kibana、Cerebro、Curl命令。 优化集群性能 优化Elasticsearch和OpenSearch集群写入性能 集群在使用前,建议参考本实践进行集群的写入性能优化,便于提高集群的写入性能,提升使用效率。 优化Elasticsearch和OpenSearch集群查询性能 集群在使用前,建议参考本实践进行集群的查询性能优化,便于提高集群的查询性能,提升使用效率。 加速关系型数据库查询 使用Elasticsearch加速关系型数据库的查询分析 关系型数据库(例如MySQL)受限于全文检索和Ad Hoc查询能力,因此会将Elasticsearch作为关系型数据库的补充,以此提升数据库的全文检索能力和高并发的Ad Hoc查询能力。 构建日志管理平台 使用Elasticsearch和Logstash构建日志管理平台 使用云搜素服务搭建的统一日志管理平台可以实时地、统一地、方便地管理日志,让日志驱动运维、运营等,提升服务管理效率。 自定义规则排序搜索 使用Elasticsearch自定义规则排序搜索结果 本实践为您介绍如何对搜索匹配的文档进行自定义评分。
  • 步骤3:搜索数据 在Elasticsearch集群中对数据进行全文检索和聚合结果显示。 全文检索 假设用户进入该电商网站,她想要查找名称包含“春装牛仔裤”的商品信息,可以搜索“春装牛仔裤”。 在Kibana执行如下搜索命令。 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执行如下聚合结果命令。 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 } ] } } }
  • 步骤2:导入数据 Elasticsearch集群支持通过多种方式导入数据,本示例选择在Kibana使用开源Elasticsearch API导入数据。 在Elasticsearch集群管理页面,选择已创建的“Sample-ESCluster”集群,单击操作列中的“Kibana”进入Kibana控制台。 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。 Console左侧区域为输入框,输入框右侧的三角形为执行命令按钮,Console右侧为结果输出区域。 图5 Console界面 在Console界面,执行如下命令创建索引“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" } 在Console界面,执行如下命令,将数据导入到“my_store”索引中。 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”时,表示导入数据成功。
  • 场景描述 某女装品牌在网上经营电商业务,以前使用传统数据库来为用户提供商品搜索功能,但随着用户数量和业务的增长,使用传统数据库的弊端愈来愈明显。主要问题表现为响应速度慢、准确性低。为了改善用户体验从而避免用户流失,该电商网站开始使用云搜索服务为用户提供商品搜索功能,不仅解决了之前使用传统数据库产生的问题,而且实现了用户数量的增长。 假设该电商网站经营商品的数据如下所示: { "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"} ] }
  • 操作流程 以下是使用Elasticsearch集群完成数据搜索的操作步骤。 开始迁移数据前,请务必按准备工作指导完成必要操作。 步骤1:创建集群:创建一个Elasticsearch非安全集群用于搜索数据。 步骤2:导入数据:在Kibana上使用开源Elasticsearch API导入数据。 步骤3:搜索数据:在Elasticsearch集群中对数据进行全文检索和聚合结果显示。 步骤4:删除索引:当不再使用对应的索引数据时,可以删除对应索引节约资源。
  • 步骤4:启动迁移任务 在Logstash集群启动配置好的迁移任务。 在Logstash集群管理页面,选择已创建的“Sample-Logstash”集群,进入集群基本信息页面。 单击右侧“配置中心”,进入Logstash配置中心界面。 选择状态为“可用”的配置文件,单击“启动”,启动配置任务。管道列表中“事件”列显示配置任务处理的任务数量。 图10 启动配置任务 数据迁移完毕,检查目标Elasticsearch集群和源集群数据的一致性。例如,分别在源集群和目标集群执行GET _cat/indices命令,对比两者的索引信息是否一致。 在Elasticsearch集群管理页面,选择源Elasticsearch集群“Source-ES”或目标Elasticsearch集群“Dest-ES”,单击操作列中的“Kibana”进入Kibana控制台。 在Kibana的左侧导航中选择“Dev Tools”,进入Console界面。 在Console界面,执行如下命令查看索引信息。 GET _cat/indices
  • 准备工作 已 注册华为账号 并开通华为云,进行了实名认证,且在使用云搜索服务前检查账号状态,账号不能处于欠费或冻结状态。 如果您还没有华为账号,请参考以下步骤创建。 打开华为云网站。 在页面右上角单击“注册”,根据提示信息完成注册。 勾选服务条款, 单击“开通”。 实名认证,请参考: 个人账号:实名认证 企业账号:实名认证 已准备好源Elasticsearch集群“Source-ES”和目标Elasticsearch集群“Dest-ES”,且都是单节点的非安全集群。
  • 操作流程 以下是使用Logstash集群将源Elasticsearch集群迁移到目标Elasticsearch集群的操作步骤。 开始迁移数据前,请务必按准备工作指导完成必要操作。 步骤1:获取Elasticsearch集群信息:获取源Elasticsearch集群和目标Elasticsearch集群的访问地址。 步骤2:创建Logstash集群:创建一个Logstash集群用于迁移Elasticsearch集群的数据。 步骤3:配置迁移任务:在Logstash集群配置Elasticsearch集群的迁移任务。 步骤4:启动迁移任务:在Logstash集群启动配置好的迁移任务。 步骤5:停止任务:当数据迁移完成,不再需要迁移任务时,您可以停止任务。 步骤6:删除集群:无需继续使用集群时,可删除集群释放资源。
  • 步骤3:配置迁移任务 在Logstash集群配置Elasticsearch集群的迁移任务。 在Logstash集群管理页面,选择已创建的“Sample-Logstash”集群,进入集群基本信息页面。 单击右侧“配置中心”,进入Logstash配置中心界面。 图6 Logstash配置中心界面 在配置中心界面,单击右上角“创建”,进入创建配置文件页面,编辑配置文件。 图7 配置任务 表5 创建配置文件参数说明 参数 说明 取值样例 名称 自定义配置文件名称。 只能包含字母、数字、中划线或下划线,且必须以字母开头。必须大于等于4个字符。 es-es 配置文件内容 展开上方“系统模板”,选择“elasticsearch”,单击操作列的“应用”,在配置文件内容中,基于模板注释填写配置项。 关键配置项请参见表6,其他配置项保持默认值。 隐藏内容列表 配置隐藏字符串列表后,在返回的配置内容中,会将所有在列表中的字串隐藏为“***”。 输入需要隐藏的敏感字串列表,按“Enter”创建。 列表最大支持20条,单个字串最大长度512字节。 不涉及 表6 配置项说明 配置 说明 取值样例 hosts 分别在input和output中填写源Elasticsearch集群和目标Elasticsearch集群的访问地址。获取方式请参见步骤1:获取Elasticsearch集群信息。 input hosts:http://10.62.179.32:9200 output hosts:http://10.62.179.33:9200 user 访问Elasticsearch集群的用户名。仅安全集群涉及,如果是非安全集群则此项使用“#”注释掉。 使用“#”注释掉 password 访问Elasticsearch集群的密码。仅安全集群涉及,如果是非安全集群则此项使用“#”注释掉。 使用“#”注释掉 index 需要迁移的索引信息,可以使用通配符设置。 index* 编辑完成后,单击“下一页”配置Logstash管道参数。 图8 配置管道参数 表7 管道参数说明 参数 说明 取值样例 pipeline.workers 并行执行管道的Filters和Outputs阶段的工作线程数。 4 pipeline.batch.size 单个工作线程在尝试执行其Filters和Outputs之前将从inputs收集的最大事件数,该值较大通常更有效,但会增加内存开销。 125 pipeline.batch.delay 管道事件批处理参数,以指定在将规模较小的事件批次调度至管道工作线程之前,对每个事件的等待时长。 50 query.type 用于事件缓冲的内部队列模型。 “memory”为基于内存的传统队列。 “persisted”为基于磁盘的ACKed持久化队列。 memory 配置完成后,单击“创建”,系统会自动进行配置文件校验,等待配置文件状态为“可用”,表示创建成功。 图9 配置文件校验
  • 场景描述 某女装品牌在网上经营电商业务,以前使用传统数据库来为用户提供商品搜索功能,但随着用户数量和业务的增长,使用传统数据库的弊端愈来愈明显。主要问题表现为响应速度慢、准确性低。为了改善用户体验从而避免用户流失,该电商网站开始使用云搜索服务为用户提供商品搜索功能,不仅解决了之前使用传统数据库产生的问题,而且实现了用户数量的增长。 假设该电商网站经营商品的数据如下所示: { "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"} ] }
  • 步骤3:搜索数据 在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集群完成数据搜索的操作步骤。 开始迁移数据前,请务必按准备工作指导完成必要操作。 步骤1:创建集群:创建一个OpenSearch非安全集群用于搜索数据。 步骤2:导入数据:在OpenSearch Dashboards上使用开源Elasticsearch API导入数据。 步骤3:搜索数据:在OpenSearch集群中对数据进行全文检索和聚合结果显示。 步骤4:删除索引:当不再使用对应的索引数据时,可以删除对应索引节约资源。
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全