华为云云搜索服务CSS从入门到实战:集群创建、数据对接与最佳实践全解析
1. 云搜索服务CSS概述:什么是华为云CSS
华为云云搜索服务(Cloud Search Service,简称CSS)是一个完全托管的分布式搜索引擎服务,它基于开源Elasticsearch和OpenSearch构建,为用户提供结构化与非结构化数据的快速检索、统计分析及报表生成能力。CSS将底层集群的部署、运维、监控、扩容等复杂工作交给云平台处理,让开发者可以专注于数据搜索业务本身。
CSS的核心价值体现在几个方面:首先,它与开源Elasticsearch和OpenSearch完全兼容,这意味着现有基于这些引擎的应用可以平滑迁移到云上,无需修改代码;其次,CSS提供了丰富的集群管理能力,包括集群创建、配置修改、节点扩缩容、快照备份与恢复等;再者,CSS深度整合了华为云的基础设施服务,例如与虚拟私有云VPC配合实现网络隔离,与对象存储服务OBS配合实现快照存储,与统一身份认证IAM配合实现精细化权限控制。
当前CSS支持的Elasticsearch版本包括7.6.2和7.10.2,OpenSearch版本包括1.3.6、2.17.1、2.19.0和3.4.0,Logstash版本为7.10.0。用户可以根据业务需求选择适合的引擎和版本。CSS的典型应用场景包括:电商网站的商品搜索与推荐、企业日志的实时采集与分析、以及基于向量检索的AI智能应用(如图像搜索、语义搜索和推荐系统)。
需要先登录华为云控制台,点击:华为云控制台,还没有账号,点击:注册并关联,已有账号点击:登录后关联
2. 创建CSS集群:从零搭建搜索引擎服务
创建CSS集群是整个对接流程的第一步。华为云提供了两种创建方式:通过管理控制台可视化创建和通过API接口编程创建。对于大多数用户而言,控制台方式最为直观便捷。
2.1 控制台创建集群
登录云搜索服务管理控制台后,在左侧导航栏选择“集群管理 > Elasticsearch”(或OpenSearch),然后单击右上角的“创建集群”按钮,即可进入新版集群创建页面。
创建过程主要包含以下几个配置环节:
基础配置:选择集群所在区域和可用区。区域决定了集群的物理数据中心位置,不同区域之间内网不互通,建议就近选择靠近业务用户的区域以减少网络延迟。可用区支持最多配置3个,多可用区部署可以提升集群的容灾能力。计费模式可选按需计费或包年包月,按需计费适合测试和短期项目,包年包月适合长期稳定运行的生产环境。
集群信息:选择集群类型(Elasticsearch或OpenSearch)和版本。自定义集群名称,名称需以字母开头,长度4到32位,可包含字母、数字、中划线或下划线。集群描述为非必填项,建议填写以便于团队识别。
节点规格:这是影响集群性能和成本的关键环节。节点数量可选1到32个,但生产环境建议至少配置3个节点以保障高可用性。CPU架构目前支持X86计算。节点规格决定了计算和内存资源,CSS提供多种规格类型:计算密集型(CPU:内存=1:2)、通用计算型(CPU:内存=1:4)、内存优化型(CPU:内存=1:8)。节点存储支持普通I/O、高I/O和超高I/O云硬盘,存储容量根据所选规格有不同取值范围,且需配置为20的倍数。
高级配置:可以启用Master节点和Client节点。Master节点负责管理集群元数据、索引及分片分配,适用于需要高可用性和集中管控的大规模集群场景。Client节点负责接收并协调外部请求(如搜索和写入),适用于处理复杂查询和大规模分片场景。此外还可以配置集群是否开启安全模式、是否启用HTTPS访问、是否开启磁盘加密等安全相关选项。
2.2 API方式创建集群
对于需要自动化管理集群的DevOps场景,CSS提供了完整的RESTful API接口。API方式创建集群需要先获取IAM认证凭证,然后向指定Endpoint发送POST请求。API支持的集群管理操作包括创建、查询、删除、重启和扩容等。具体的API调用方法和参数说明可在《云搜索服务API参考》中查阅。
3. 连接与对接CSS集群:三种主流方式
集群创建完成后,接下来需要建立与集群的连接。CSS支持多种对接方式,以适应不同的使用场景和技术栈。
3.1 通过Kibana/OpenSearch Dashboards可视化对接
Kibana是Elasticsearch官方的数据可视化工具,CSS集群默认集成了Kibana(Elasticsearch集群)或OpenSearch Dashboards(OpenSearch集群)。登录方式非常简单:在集群管理页面,找到目标集群,单击“操作”列中的“Kibana”按钮即可进入Kibana登录界面。对于非安全模式的集群,将直接进入Kibana操作界面;对于安全模式的集群,则需要输入创建集群时设置的管理员用户名和密码。
Kibana提供了强大的数据探索和可视化能力。通过Kibana的Dev Tools控制台,用户可以执行各种Elasticsearch API命令来管理索引、导入数据和执行查询。此外,Kibana还支持创建仪表板、绘制图表、设置告警等高级功能。如果需要在公网访问Kibana,CSS支持为安全模式集群开启Kibana公网访问功能,配置完成后集群将获得一个公网访问地址。
3.2 通过curl和RESTful API对接
Elasticsearch和OpenSearch都提供了丰富的RESTful API,用户可以通过curl等HTTP客户端直接调用这些API与集群交互。这种方式适合脚本化操作和快速测试。
对于非安全集群,直接通过集群的内网访问地址(格式为http://{内网IP}:{端口})即可发起请求。对于安全集群,则需要在请求头中添加认证信息。获取集群内网访问地址的方法是在集群基本信息页面查看。
以下是一些常用的curl操作示例:
# 查看集群健康状态\ncurl -X GET \"http://{集群内网IP}:9200/_cluster/health?pretty\"\n\n# 创建索引\ncurl -X PUT \"http://{集群内网IP}:9200/my_index\" -H 'Content-Type: application/json' -d'\n{\n \"settings\": {\n \"number_of_shards\": 2,\n \"number_of_replicas\": 1\n }\n}'\n\n# 索引一条文档\ncurl -X POST \"http://{集群内网IP}:9200/my_index/_doc/1\" -H 'Content-Type: application/json' -d'\n{\n \"title\": \"华为云CSS入门\",\n \"content\": \"这是一篇关于云搜索服务的教程\",\n \"publish_date\": \"2026-07-12\"\n}'\n\n# 搜索数据\ncurl -X GET \"http://{集群内网IP}:9200/my_index/_search?q=title:华为云&pretty\"\n\n# 删除索引\ncurl -X DELETE \"http://{集群内网IP}:9200/my_index\"3.3 通过编程语言SDK对接
对于应用程序集成场景,使用官方SDK是最佳实践。CSS提供了多种编程语言的SDK,包括Java、Python、Go等。SDK封装了底层的HTTP通信和认证逻辑,让开发者可以专注于业务代码。
3.3.1 Java客户端接入
CSS集群兼容Elasticsearch官方的Rest High Level Client。以下是通过Java客户端连接非安全集群的示例代码:
import org.elasticsearch.client.RestClient;\nimport org.elasticsearch.client.RestHighLevelClient;\nimport org.elasticsearch.action.index.IndexRequest;\nimport org.elasticsearch.action.index.IndexResponse;\nimport org.elasticsearch.action.search.SearchRequest;\nimport org.elasticsearch.action.search.SearchResponse;\nimport org.elasticsearch.index.query.QueryBuilders;\nimport org.elasticsearch.search.builder.SearchSourceBuilder;\nimport java.io.IOException;\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class CSSJavaClientExample {\n public static void main(String[] args) throws IOException {\n // 创建RestHighLevelClient,连接CSS集群\n RestHighLevelClient client = new RestHighLevelClient(\n RestClient.builder(\n new HttpHost(\"{集群内网IP}\", 9200, \"http\")\n )\n );\n \n // 索引文档\n Map<String, Object> document = new HashMap<>();\n document.put(\"title\", \"华为云CSS Java接入示例\");\n document.put(\"content\", \"通过RestHighLevelClient操作CSS集群\");\n document.put(\"timestamp\", System.currentTimeMillis());\n \n IndexRequest indexRequest = new IndexRequest(\"my_index\")\n .id(\"1\")\n .source(document);\n IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);\n System.out.println(\"索引结果: \" + indexResponse.getResult());\n \n // 搜索文档\n SearchRequest searchRequest = new SearchRequest(\"my_index\");\n SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();\n sourceBuilder.query(QueryBuilders.matchQuery(\"title\", \"华为云CSS\"));\n searchRequest.source(sourceBuilder);\n \n SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);\n System.out.println(\"搜索结果: \" + searchResponse.getHits().getTotalHits().value);\n \n // 关闭客户端\n client.close();\n }\n}对于安全模式集群,需要在创建RestClient时配置用户名和密码认证。此外,CSS还提供了华为云专用的Java SDK,可以通过API Explorer在线生成符合需求的SDK代码。
3.3.2 Python客户端接入
Python开发者可以使用elasticsearch库来连接CSS集群。安装命令:pip install elasticsearch。以下是一个完整的Python接入示例:
from elasticsearch import Elasticsearch\nfrom datetime import datetime\nimport json\n\n# 连接非安全模式的CSS集群\nes = Elasticsearch(\n [\"http://{集群内网IP}:9200\"],\n request_timeout=30\n)\n\n# 检查集群健康状态\nhealth = es.cluster.health()\nprint(f\"集群状态: {health['status']}\")\n\n# 创建索引\nindex_name = \"python_demo\"\nif not es.indices.exists(index=index_name):\n es.indices.create(\n index=index_name,\n body={\n \"settings\": {\n \"number_of_shards\": 2,\n \"number_of_replicas\": 1\n }\n }\n )\n print(f\"索引 {index_name} 创建成功\")\n\n# 索引文档\ndoc = {\n \"title\": \"华为云CSS Python接入示例\",\n \"content\": \"通过elasticsearch库操作CSS集群\",\n \"tags\": [\"python\", \"css\", \"elasticsearch\"],\n \"timestamp\": datetime.now().isoformat()\n}\nres = es.index(index=index_name, id=1, body=doc)\nprint(f\"文档索引结果: {res['result']}\")\n\n# 批量索引文档\ndocs = [\n {\"_index\": index_name, \"_id\": 2, \"_source\": {\"title\": \"文档2\", \"content\": \"批量导入示例1\"}},\n {\"_index\": index_name, \"_id\": 3, \"_source\": {\"title\": \"文档3\", \"content\": \"批量导入示例2\"}}\n]\nbulk_res = es.bulk(body=docs)\nprint(f\"批量导入结果: {bulk_res['errors']}\")\n\n# 搜索文档\nsearch_body = {\n \"query\": {\n \"match\": {\n \"title\": \"华为云CSS\"\n }\n },\n \"size\": 10\n}\nsearch_res = es.search(index=index_name, body=search_body)\nprint(f\"搜索到 {search_res['hits']['total']['value']} 条结果\")\nfor hit in search_res['hits']['hits']:\n print(f\" - {hit['_source']['title']}\")\n\n# 删除索引\n# es.indices.delete(index=index_name)4. 数据操作:索引管理与数据导入
连接建立之后,核心工作就是对集群中的数据进行操作,包括索引的创建与管理、数据的导入与查询。
4.1 索引管理
索引是Elasticsearch中存储数据的逻辑单元,类似于关系型数据库中的表。创建索引时需要指定分片数和副本数等设置。分片数决定了索引数据的并行处理能力,副本数决定了数据的冗余度和查询吞吐量。生产环境建议根据数据量和查询负载合理规划这些参数。
在Kibana的Dev Tools控制台中,可以通过以下命令创建索引并指定映射(Mapping):
PUT /products\n{\n \"settings\": {\n \"number_of_shards\": 3,\n \"number_of_replicas\": 1\n },\n \"mappings\": {\n \"properties\": {\n \"product_id\": { \"type\": \"keyword\" },\n \"product_name\": { \"type\": \"text\", \"analyzer\": \"ik_max_word\" },\n \"description\": { \"type\": \"text\", \"analyzer\": \"ik_smart\" },\n \"price\": { \"type\": \"float\" },\n \"category\": { \"type\": \"keyword\" },\n \"stock\": { \"type\": \"integer\" },\n \"create_time\": { \"type\": \"date\" }\n }\n }\n}查看索引信息、修改索引设置、删除索引等操作均可通过对应的API完成。
4.2 数据导入方式
CSS支持多种数据导入方式,以满足不同数据源和场景的需求。
方式一:通过API逐条或批量导入。使用Elasticsearch的_doc API或_bulk API可以灵活地将数据写入集群。批量导入能够显著提升写入吞吐量,适合数据量较大的场景。
方式二:通过JSON文件批量导入。将数据整理成JSON格式的文件,然后使用curl或Kibana的导入功能进行批量导入。
方式三:通过CDM(云数据迁移)服务导入。CDM是华为云提供的可视化数据迁移工具,支持将存储在Oracle数据库或对象存储服务OBS中的数据导入到CSS集群中,数据文件支持JSON格式。CDM提供了向导式界面,无需编写代码即可完成数据迁移,支持高并发和断点续传。
方式四:通过Logstash进行数据采集与导入。Logstash支持全量迁移和增量迁移,首次迁移使用全量迁移,后续增量数据可以通过配置增量迁移策略来同步。
以下是通过_bulk API批量导入JSON数据的示例:
POST /products/_bulk\n{\"index\": {\"_id\": \"1\"}}\n{\"product_id\": \"P001\", \"product_name\": \"华为MateBook\", \"description\": \"高端商务笔记本\", \"price\": 6999.00, \"category\": \"电子产品\", \"stock\": 50, \"create_time\": \"2026-07-12\"}\n{\"index\": {\"_id\": \"2\"}}\n{\"product_id\": \"P002\", \"product_name\": \"华为P系列手机\", \"description\": \"旗舰拍照手机\", \"price\": 4999.00, \"category\": \"电子产品\", \"stock\": 100, \"create_time\": \"2026-07-12\"}\n{\"index\": {\"_id\": \"3\"}}\n{\"product_id\": \"P003\", \"product_name\": \"华为FreeBuds\", \"description\": \"无线降噪耳机\", \"price\": 899.00, \"category\": \"音频设备\", \"stock\": 200, \"create_time\": \"2026-07-12\"}4.3 数据查询与分析
CSS的核心能力在于快速检索。Elasticsearch提供了丰富的查询DSL(Domain Specific Language),支持全文检索、精确匹配、范围查询、聚合分析等多种查询模式。
以下是一个复杂的搜索查询示例,包含了全文检索、过滤和聚合:
GET /products/_search\n{\n \"query\": {\n \"bool\": {\n \"must\": [\n { \"match\": { \"product_name\": \"华为\" } }\n ],\n \"filter\": [\n { \"range\": { \"price\": { \"gte\": 1000, \"lte\": 8000 } } },\n { \"term\": { \"category\": \"电子产品\" } }\n ]\n }\n },\n \"aggs\": {\n \"price_stats\": {\n \"stats\": { \"field\": \"price\" }\n },\n \"category_count\": {\n \"terms\": { \"field\": \"category\" }\n }\n },\n \"sort\": [\n { \"price\": { \"order\": \"asc\" } }\n ],\n \"size\": 20\n}5. 安全管理与最佳实践
作为生产环境的搜索引擎,安全性是CSS使用中不可忽视的一环。CSS提供了多层次的安全保障机制。
5.1 IAM权限控制
通过统一身份认证IAM,可以实现精细化的权限管理。建议的做法是:为主账号创建多个IAM子用户,根据角色分配不同的权限策略。CSS支持的系统权限包括CSS ReadOnlyAccess(只读权限)和CSS FullAccess(完全权限)等。如果系统预置策略不满足需求,还可以创建自定义策略。权限配置完成后,可以通过尝试创建集群来验证权限是否生效。
5.2 安全模式与加密
在创建集群时开启安全模式,可以启用用户名密码认证和HTTPS加密传输。安全模式集群支持配置Kibana公网访问,获得一个公网访问地址。此外,建议在创建集群时开启磁盘加密功能,该功能通过云密钥管理服务KMS对数据进行加密,数据以密文形式存储在磁盘中,有效降低因磁盘物理丢失或非法访问导致的数据泄露风险。
5.3 网络安全配置
CSS集群部署在VPC内,通过安全组规则控制网络访问。建议将安全组的入方向规则配置为仅允许必要的IP地址范围访问集群端口(9200用于HTTP API,9300用于节点间通信)。如果需要在公网访问Kibana,可以开启Kibana公网访问功能并配置合适的带宽。
5.4 审计日志与监控
开启安全审计日志可以记录所有对集群的操作,方便事后回溯和问题排查。CSS服务还提供了集群监控功能,可以实时查看集群的健康状态、CPU使用率、内存使用率、磁盘使用率等关键指标。
5.5 数据备份与恢复
CSS支持通过快照功能将集群数据备份到OBS桶中。快照备份是应对数据丢失风险的最后一道防线。建议配置自动创建快照策略,定期对集群数据进行备份。当需要恢复数据时,可以从快照中恢复整个索引或指定索引。
5.6 集群迁移方案
在实际运维中,可能会遇到集群版本升级、跨区域迁移等需求。CSS提供了多种数据迁移方案:通过备份与恢复实现集群间迁移(适用于源和目标均为CSS集群的场景)、通过Reindex API实现集群间数据迁移、以及通过CDM实现整库迁移。选择哪种方案取决于具体的迁移场景和网络条件。
6. 典型应用场景与计费说明
6.1 典型应用场景
电商商品搜索:CSS可以为电商平台提供高性能的商品搜索服务,支持分词检索、分类过滤、价格排序和聚合统计等功能。相比传统数据库,CSS在搜索响应速度和查询准确性上有显著优势。
日志分析与运维:CSS可以构建日志分析平台,对应用日志、系统日志进行实时采集、索引和检索,帮助运维团队快速定位问题。
向量检索与AI应用:CSS的向量检索能力可以快速构建AI智能应用,如图像搜索、推荐系统和语义搜索等。
6.2 计费说明
CSS的计费主要包含以下几个维度:集群节点规格费用(按节点规格和数量计费)、存储空间费用(按存储容量计费)、以及公网流量费用(如果开启了公网访问)。计费模式支持按需计费和包年包月两种,用户可以根据业务需求选择合适的计费方式。此外,快照存储在OBS中会产生额外的OBS存储费用。
7. 常见问题解答
问1:CSS集群创建后,如何获取内网访问地址?
答:登录云搜索服务管理控制台,在集群管理页面单击目标集群名称进入集群基本信息页面,在“内网访问地址”区域即可查看集群的内网IP和端口。
问2:安全模式集群和非安全模式集群有什么区别?
答:安全模式集群在创建时需要设置管理员用户名和密码,开启后所有API请求都需要进行身份认证,且支持HTTPS加密传输。非安全模式集群无需认证即可访问,适合测试环境。生产环境强烈建议使用安全模式集群。
问3:如何让Kibana支持公网访问?
答:只有开启了安全模式的集群才能配置Kibana公网访问。在集群基本信息页面,找到“Kibana公网访问”选项,打开开关并配置带宽即可获取公网访问地址。
问4:CSS集群的节点数量可以后期调整吗?
答:可以。CSS支持集群的扩容和缩容操作,可以通过控制台或API调整数据节点的数量。需要注意的是,缩容操作需要确保集群有足够的剩余资源来重新分配数据。
问5:如何将自建Elasticsearch集群的数据迁移到CSS?
答:自建Elasticsearch集群迁移到CSS主要有三种方案:通过快照备份与恢复(需共享存储)、通过Reindex API在线迁移、以及通过Logstash进行数据同步。具体选择哪种方案取决于网络环境、数据量和业务对中断时间的容忍度。
问6:CSS集群的存储空间不足时怎么办?
答:可以通过扩容节点存储容量来解决。在控制台的集群管理页面,选择目标集群,进入“扩容”操作,调整节点存储容量即可。此外,也可以通过配置索引的生命周期管理策略,自动将过期数据迁移到冷存储或删除,以释放存储空间。



