Amazon CloudSearch 设计具有高吞吐量和低延迟性,支持一组丰富的功能,包括针对 34 种语言的特定语言文本处理、自由文本搜索、分面搜索、地理空间搜索、可自定义相关性排名、突出显示、自动完成和用户可配置的扩展和可用性选项。
如需使用 Amazon CloudSearch,您要遵守下列简单步骤:
- 创建搜索域
- 配置数据的索引选项
- 上传要索引的数据
- 从您的网站或应用程序提交搜索请求
在以下部分,您将看到关于 CloudSearch 工作原理的详细信息。
对于您希望使其可搜索的每个数据集合,您可为其创建一个 Amazon CloudSearch 搜索域。运行搜索引擎所需的数据以及硬件和软件资源都封装在搜索域中。每个搜索域都包含一个或多个搜索实例。搜索实例指的是拥有有限 RAM 和 CPU 资源来索引数据和处理请求的服务器实例。域中的搜索实例数量取决于您集合中的文档,以及您的搜索请求的容量和复杂性。
作为一项托管搜索服务,Amazon CloudSearch 可确定提供低延迟、高吞吐量的搜索性能所需的搜索实例大小和数量。当您创建搜索域时,默认情况下,Amazon CloudSearch 会使用小型搜索实例类型 (search.m1.small)。您可以选择较大的搜索实例类型来提高您的域更新容量并降低其上传和索引大型数据集合所需的时间。(如果您需要的容量超出了最大的实例类型的能力范围,您可以增加实例数量,从而使索引可以跨多个实例分区进行。)
随着搜索索引中的数据量增加,Amazon CloudSearch 将按需求自动扩展您的搜索域。当您的索引超过当前实例类型的容量时,需要将域扩展到更大的实例类型。如果您的搜索索引超过最大实例类型的容量,Amazon CloudSearch 将跨多个实例对索引进行分区。反之,如果您的索引缩小,CloudSearch 会将您的域缩小到更少分区或更小的搜索实例类型。
Amazon CloudSearch 还会自动扩展以处理搜索流量的增加情况。当一个搜索实例的查询负载接近其最大值时,CloudSearch 将会为搜索实例部署一个副本。反之,如果搜索流量下降,Amazon CloudSearch 会删除不必要的副本,以最大程度降低成本。
举例来说,分拆为三个分区的搜索索引使用三个搜索实例(每个分区一个)。随着搜索流量增加到超过单个搜索实例的处理容量,将复制更多分区以提供更多查询容量。一旦实例复制完成,域将总共包含六个搜索实例 – 每个分区两个。如果流量继续增加,Amazon CloudSearch 会视需要增加更多副本。
如果您预期会有大量查询流量或流量会有大幅上升,则您可以在域中明确添加更多搜索实例副本。
您可以在 AWS 网站上的账户活动页面上、通过 AWS 管理控制台,或者通过 AWS CLI 或 AWS 软件开发工具包提交 CloudSearch API 请求来查看您的 Amazon CloudSearch 域所使用的资源。
每种搜索实例类型可支持的数据量基本都取决于待索引文档的大小,以及为域所配置的索引选项。
如需展示每种搜索实例类型的容量,请查看示例文档和 IMDb 电影数据集的配置。以下示例显示的是大小在 1 KB 左右的 IMDb 电影文档:
{
"fields" : {
"directors" : [
"Francis Lawrence"
],
"release_date" : "2013-11-11T00:00:00Z",
"genres" : [
"Action",
"Adventure",
"Sci-Fi",
"Thriller"
],
"image_url" : "http://ia.media-imdb.com/images/M/MV5xMzNeMzAx._V1_SX400_.jpg",
"plot" : "Katniss Everdeen and Peeta Mellark become targets of the Capitol after their victory in the 74th Hunger Games sparks a rebellion in the Districts of Panem.","title" : "The Hunger Games: Catching Fire",
"rank" : 4,
"running_time_secs" : 8760,
"actors" : [
"Jennifer Lawrence",
"Josh Hutcherson",
"Liam Hemsworth"
],
"year" : 2013
},
"id" : "tt1951264",
"type" : "add"
}
如需索引和搜索这类电影文档,我们可以使用索引字段为每个文档字段配置搜索域。我们可以为每个字段指定多个索引选项,如字段类型以及是否能搜索字段、启用分面、启用返回、启用排序和启用突出显示。这些索引选项直接影响适合搜索实例的文档数量。下表显示了 IMDb 电影文档的索引字段的示例配置。
名称 |
类型 |
搜索 |
分面 |
返回 |
排序 | 突出显示 |
---|---|---|---|---|---|---|
演员 |
text-array |
✔ | – | ✗ | – | ✗ |
导演 |
text-array |
✔ | – | ✗ | – | ✗ |
类型 |
literal-array |
✔ | ✔ | ✗ |
– | – |
image_url |
text |
✗ | – | ✗ | ✗ | ✗ |
情节 |
text |
✔ | – | ✗ | ✗ | ✔ |
排名 | int | ✔ | ✗ | ✗ | ✔ | – |
评级 |
double |
✔ | ✔ | ✗ | ✔ | – |
release_date |
date |
✔ | ✔ | ✗ | ✔ | – |
running_time_secs |
int |
✔ | ✔ | ✗ | ✔ | – |
标题 |
text |
✔ | – | ✔ | ✔ | ✔ |
年份 |
int |
✔ | ✔ | ✔ | ✔ | – |
根据文档大小 (1KB) 和上述索引配置,每种搜索实例类型的文档容量如下表所示。
搜索实例类型 | 数据容量 |
---|---|
小型搜索实例 (search.m1.small) |
200 万个文档 |
大型搜索实例 (search.m1.large) | 800 万个文档 |
超大型搜索实例 (search.m2.xlarge) |
1600 万个文档 |
双倍超大型搜索实例 (search.m2.2xlarge) | 3200 万个文档 |
当然,这只是一个示例。不同的文档和不同的配置可使适合实例的文档数量产生巨大改变。如果您超出了单个双倍超大型搜索实例的容量,Amazon CloudSearch 将在更多个双倍超大型搜索实例之间对您的搜索索引进行自动分区。可在多达 10 个双倍超大型搜索实例之间对索引进行分区,从而支持数以千万计或数以亿计的文档。如果您需要进一步扩展,请联系我们。
您可以通过三项服务与 Amazon CloudSearch 交互:
- 配置服务 – 创建和配置搜索域
- 文档服务 – 上传批量文档
- 搜索服务 – 提交搜索和建议请求
您可以使用 AWS Identity and Access Management (IAM) 策略管理对 Amazon CloudSearch 配置服务和每个域文档和搜索服务的访问。
使用配置服务,您能够创建和配置搜索域。如需设置搜索域,您可以为其指定一个唯一的名称并配置索引选项、文本分析方案、可用性选项、扩展选项、建议选项和表达式:
- 索引选项可指定您希望包括在索引中的字段。您可以使用 AWS 管理控制台或者 Amazon CloudSearch 命令行工具扫描您的数据并自动配置默认索引选项。
- 文本分析方案为 text 和 text-array 字段指定特定语言的文本处理选项。分析方案控制应在索引期间予以忽略的非索引字,定义术语的常见同义词并指定如何将术语映射到常见的词干。
- 通过可用性选项,您可以在两个可用区之间部署一个域,以确保发生服务中断时的高可用性。
- 通过扩展选项,您可以通过指定所需实例类型、复制计数和分区计数来预扩展您的域。在您需要上传大量文档或预计查询流量会有大幅增加时,该选项很有用。
- 通过建议索引,您能够为不完整的搜索查询检索可能的匹配内容,从而使您能够在用户输入内容的同时显示结果。
- 表达式是在查询时计算的数值表达式。您可以使用表达式控制如何给搜索结果排名。默认情况下,文档按相关性分数进行排名,估算相关性分数时,会将搜索术语在一个文档中出现的频率考虑进去。您可以使用表达式将其他因素包括在排名中。例如,如果文档包含一个名为“热门程度”的数字字段,则您可以定义一个表达式,将热门程度与默认的相关性分数结合起来,从而使相关的热门文档在搜索结果中排在更靠前的位置。
您可以使用文档服务,对域的可搜索数据进行更改。每个域都有特有的文档服务 HTTP 终端节点。
如需发送数据到域,您需要将其格式化为 JSON 或 XML。您希望能够作为搜索结果返回的每个项目都表示为一个文档。每个文档具有唯一文档 ID 以及一个或多个字段,其中包含您希望搜索并在结果中返回的数据。文档字段可以包含任何 UTF-8 字符串数据。您的域索引选项可指定您希望索引和使用数据的方式。
搜索服务可处理域的搜索和建议请求。每个域都有特有的搜索 HTTP 终端节点。当您发送搜索或建议请求时,搜索服务会返回一个匹配文档的列表。搜索结果能够以 JSON 或 XML 格式返回。
Amazon CloudSearch 提供丰富的查询语言,让您能够在特定字段内部进行搜索,执行复杂的布尔搜索,检索分面信息,并指定您希望结果中包含的数据。您还可以指定控制查询术语处理方式的选项,并使用其它查询分析程序,如 Lucene 或 DisMax 查询分析程序。
您可以使用 Amazon CloudSearch 控制台中的搜索测试器来测试示例查询。
使用本服务需遵守 Amazon Web Services 客户协议。