亚马逊AWS官方博客

Amazon CloudSearch的全托管式搜索解决方案

背景

在移动互联网的今天,搜索无处不在。不论是在电商,社交媒体,还是视频app中,搜索都扮演了举足轻重的角色。搜索作为信息的入口,能够帮助用户快速从海量信息中找到想要的内容,极大地提高了终端用户的使用体验。

假如您现在正准备为一个业务繁忙的网站增强现有搜索功能。那么摆在您面前的,有很多的解决方案和可以参考的技术文档,例如运行 SOLR、Elasticsearch 或其他一些软件的服务器集群等。但是这些方案无疑都需要一定的学习和管理成本。那么对于您来说,最理性的方式,可能是希望使用一个全托管式的搜索引擎服务来快速而轻松地实现业务需求。那么我们今天像您介绍Amazon的CloudSearch服务。

什么是Amazon CloudSearch

Amazon Elasticsearch 和 Amazon CloudSearch都是亚马逊基于云的搜索解决方案。Amazon Elasticsearch 是一个基于开源的解决方案,而Amazon CloudSearch 则是一个完全托管的搜索服务。CloudSearch设置起来非常简单,易于使用,它可让您轻松且经济高效地为您的网站或应用程序设置、管理和扩展搜索解决方案。

凭借 Amazon CloudSearch,您可以迅速为您的网站或应用程序添加丰富的搜索功能。您不必成为搜索专家,也不用担心硬件的预置、设置和维护。您只需在 AWS 管理控制台中单击几下即可创建一个搜索域,并上传您希望能搜索的数据。Amazon CloudSearch 会自动预置所需的资源,并部署一个高度优化的搜索索引。您可以随时轻松地更改您的搜索参数、优化搜索相关性和应用新设置。随着您的数据量和流量的变化,Amazon CloudSearch 会进行无缝调整,满足您的需求。 Amazon CloudSearch 支持多种强大的丰富的搜索功能,如:自由文本、布尔逻辑和分面搜索;自动完成建议;可自定义的相关性排名和查询时间排名表达式;字段权重;地理空间搜索;突出显示;支持 34 种语言。

· 简单

您可以通过 AWS 管理控制台,AWS CLI 和 AWS 开发工具包配置和管理 Amazon CloudSearch 域。只需指向一个示例数据,Amazon CloudSearch 就会自动推荐相关选项,供您选择配置域的索引的方法。您可以轻松添加或删除索引字段,并自定义诸如分面和突出显示等搜索选项。配置变更不需要您重新上传数据。

· 可扩展

Amazon CloudSearch 为所有搜索域提供了强大的自动扩展功能。随着您的数据或查询量的变化,Amazon CloudSearch 可以根据需要扩展或缩减您的搜索域资源。如果您事先了解您需要更多的容量处理批量上传,或预计会出现搜索流量激增的情况,您可以控制扩展。

· 可靠

Amazon CloudSearch 为您的搜索域提供了自动监控和自动恢复能力。启用多可用区时,Amazon CloudSearch 可在两个可用区内为搜索域预置和维持资源,以确保高可用性。更新会自动应用到两个可用区中的搜索实例。搜索流量在两个可用区内分配,并且在出现故障时,各区域中的实例都能够处理所有负载。

· 高性能

通过自动分区和水平与垂直扩展,即使在大规模情况下,Amazon CloudSearch 也能确保低延迟和高吞吐量的性能。

· 完全托管

Amazon CloudSearch 是一种完全托管的自定义搜索服务。

可为您处理软硬件预置、设置与配置、软件修补、数据分区、节点监控、扩展和数据持久性。

您可以从Amazon CloudSearch获取 JSON 或 XML 格式的搜索结果,根据字段值对结果进行排序和筛选,并按字母顺序、数字顺序或自定义表达式对结果进行排序。要使用 Amazon CloudSearch 构建搜索解决方案,您需要执行以下步骤:

配置

以下步骤将带您在Amazon CloudSearch上创建搜索域并配置数据,类型为json、XML或CSV的数据皆可兼容。请注意,目前Amazon CloudSearch在以下区域提供服务:

US East (Northern Virginia),

US West (Oregon),

US West (N. California),

EU (Ireland),

EU (Frankfurt),

South America (Sao Paulo)

Asia Pacific (Singapore, Tokyo, Sydney, and Seoul)

·  创建和配置搜索域

搜索域包括您的可搜索数据和处理您的搜索请求的搜索实例。 如果您有多个要搜索的数据集合,您可以创建多个搜索域。 登录AWS控制台,进入Amazon CloudSearch界面。点击Create a New Domain 创建新的搜索域。Search Domain Name会成为搜索API url的一部分。您可以依据数据和使用场景调整Instance Type和Replication Count的大小。如果您的数据量很大,建议使用更大的Instance Type;如果您预期并发的访问很多,您可以适当增加Replication Count。此教程将使用默认大小。

· 上传索引配置文件

Amazon CloudSearch会在数据上传时自动匹配索引,能够极大程度的提高搜索性能。在定义索引时,您不需要提供所有数据,只需要几条样例数据让Amazon CloudSearch识别数据特性并附以索引。

多种样例数据上传方法可供选择:

  • 从本地上传
  • 从S3上传
  • 从DynamoDB识别
  • 使用Index Configuration手动配置
  • 使用已定义的Index

此教程将选择方法3,使用DynamoDB识别。该方法将自动识别DynamoDB的数据,并进行自动配置。

· 配置索引

Amazon CloudSarch会根据您上传的索引配置文件自动配置索引,您仍可根据需要手动进行改动。您之后上传的数据字段必须与索引配置的字段匹配,数据的类型需与索引配置的类型匹配。Amazon CloudSearch支持以下索引字段类型:

  • date:时间戳。UTC日期和时间将会以 IETF RFC3339格式: yyyy-mm-ddTHH:mm:ss.SSSZ 呈现
  • date-array:含有多个时间字段
  • double: 64 位 double值
  • double-array: 含有多个double字段
  • int:64位int整数(含符号)
  • int-array: 含有多个int字段
  • latlon: 位置字段(含有经纬度lat, lon信息对)
  • literal:你想要进行精确搜索的字段,区分大小写
  • literal-array:含有多个literal字段
  • text:任意字母数字,不区分大小写
  • text-array:含有多个text字段

根据不同数据类型,您可配置以下选项:

  • HighlightEnabled: 在搜索结果中进行高亮。可适用类型: text, text-array
  • FacetEnabled: 在搜索结果中得到facet信息。text数据类型并不适用。可适用类型: int, int-array, date, date-array, double, double-array, latlon, literal, literal-array
  • ReturnEnabled:在搜索结果中,您可以得到标有 ReturnEnabled 字段的数据内容。可适用类型:: int, int-array, date, date-array, double, double-array, latlon, literal, literal-array, text, text-array
  • SearchEnabled:可根据SearchEnabled 的字段进行搜索。text数据类型是始终可以搜索的。可适用类型:int, int-array, date, date-array, double, double-array, latlon, literal, literal-array, text, text-array

  • SortEnabled:在搜索结果中,根据 SortEnabled进行字母顺序或数字大小排序。可适用类型:int, date, latlon, double, literal, text

· 设置访问权限政策

Amazon CloudSearch提供了多种方式,允许和限制对搜索和建议API和搜索域文件API的访问,用户可根据需要手动配置。Amazon CloudSearch为用户提供了五种已定义的常用政策。此教程选择了Allow open access to all services。请注意,在实际使用中,请谨慎使用此政策,因为该账户有权限使用您的API进行搜索,并且有权限更改搜索文件。

· 确认搜索域信息

在最后一步确认您的搜索域信息,您可根据需要进行编辑。

· 搜索域dashboard

搜索域需要10分钟左右进行配置,在此期间显示LOADING状态。当搜索域配置完毕并可使用时,会显示ACTIVE状态。

· 将数据上传至搜索域

Amazon CloudSearch 为您的数据编制索引并将搜索索引部署到一个或多个搜索实例。

多种数据上传方法可供选择:

  • 从本地上传
  • 从S3上传
  • 从DynamoDB上传

此教程使用方法3,从DynamoDB上传。

· 审核上传的数据

在数据上传至搜索域之前,您可以对数据进行审核。您可以验证数据字段和数据数量。

  • 审核完毕后,数据将被上传至搜索域。

在搜索域内进行搜索

您将搜索请求作为 HTTP/HTTPS GET 请求发送到域的搜索端点。您可以在CloudSearch dashboard找到Search Endpoint。
https://xxxxxxxx.${AWS_REGION}.cloudsearch.amazonaws.com/search?q=united

您也可以在CloudSearch Dashboard的Run a Test Search进行测试搜索。

添加Suggester搜索建议(可选)

Suggester可以帮助您在推荐可能的搜索结果,帮助您自动补全或者进行模糊搜索。该功能同样可以根据字段进行排序。

本篇作者

张晓功

AWS云原生应用架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。精通微服务架构设计、治理、容器编排、监控熔断等性能和可靠性等具体功能落地。具有丰富的互联网产品开发、大规模并行计算、性能优化等经验。

刘红雨

云原生应用工程师,负责基于AWS的云计算方案架构的设计和实施开发。拥有丰富的互联网产品的开发经验,负责多个项目的搜索功能的设计和开发,熟悉搜索的性能优化,对公有云、机器学习、DevOps、基于云原生的微服务架构、敏捷加速研发效能等有深入的研究和热情。