筛选和分面搜索 - Amazon Kendra

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

筛选和分面搜索

您可以使用筛选条件来改善来自 Query API 的搜索结果或响应。筛选条件将响应中的文档限制为直接应用于查询的文档。要创建分面搜索建议,请使用布尔逻辑从响应或不符合特定条件的文档中筛选出特定的文档属性。您可以使用 Query API 中的 Facets 参数指定分面。

要搜索已编入索引的 Amazon Kendra 文档 Amazon Lex,请使用亚马逊。 KendraSearchIntent。有关使用进行配置的示例 Amazon Kendra Amazon Lex,请参阅为 Amazon Kendra 索引创建常见问题解答机器人。您也可以使用为响应提供过滤器AttributeFilter。这是配置 AMAZON.KendraSearchIntent 时采用 JSON 格式的查询筛选条件。要在控制台中配置搜索意图时提供属性筛选条件,请转到意图编辑器并选择 Amazon Kendra 查询以提供 JSON 格式的查询筛选条件。有关 AMAZON.KendraSearchIntent 的更多信息,请参阅 Amazon Lex 文档

分面

分面是一组搜索结果的限定视图。例如,您可以为世界各地的城市提供搜索结果,其中文档按与其关联的特定城市进行筛选。或者,您可以创建分面来显示特定作者的结果。

您可以将与文档关联的文档属性或元数据字段用作分面,这样您的用户就可以按类别或该分面内的值进行搜索。您还可以在搜索结果中显示嵌套分面,这样您的用户不仅可以按类别或字段进行搜索,还可以按子类别或子字段进行搜索。

以下示例显示了如何获取“City”自定义属性的分面信息。

response=kendra.query( QueryText = query, IndexId = index, Facets = [ { "DocumentAttributeKey" : "City" } ] )

您可以使用嵌套分面来进一步缩小搜索范围。例如,文档属性或分面“City”包括一个名为“Seattle”的值。此外,文档属性或分面 “CityRegion” 包括分配给 “西雅图” 的文档的 “北” 和 “南” 值。您可以在搜索结果中显示嵌套的刻面及其计数,这样不仅可以按城市搜索文档,还可以按城市内的区域搜索文档。

请注意,嵌套分面可能会影响查询延迟。一般规则是,使用的术语和运算符越多,对延迟的潜在影响就越大。影响延迟的其他因素包括已编入索引的文档的平均大小、索引的大小、高度复杂的查询以及 Amazon Kendra 索引的总体负载。

以下示例说明如何获取 “” 自定义属性的分面信息,作为 “CityCityRegion” 中的嵌套分面。

response=kendra.query( QueryText = query, IndexId = index, Facets = [ { "DocumentAttributeKey" : "City", "Facets": [ { "DocumentAttributeKey" : "CityRegion" } ] } ] )

分面信息(例如文档数量)将在 FacetResults 响应数组中返回。您可以使用这些内容在应用程序中显示分面搜索建议。例如,如果文档属性“City”包含可应用搜索的城市,则使用该信息显示城市搜索列表。用户可以选择城市来筛选搜索结果。要进行分面搜索,请调用 Query API 并使用所选文档属性筛选结果。

对于查询,每个分面最多可以显示 10 个分面值,并且在一个分面内只能显示一个嵌套分面。如果要增加这些限制,请联系支持部门。如果要将每个刻面的刻面值数限制为小于 10,则可以在 Facet 对象中进行指定。

以下 JSON 响应示例,显示了限于“City”文档属性的各个方面。响应包括分面值的文档数量。

{ 'FacetResults': [ { 'DocumentAttributeKey': 'City', 'DocumentAttributeValueCountPairs': [ { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Dubai' } }, { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Seattle' } }, { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'Paris' } } ] } ]

您还可以显示嵌套分面(例如城市中的区域)的刻面信息,以进一步筛选搜索结果。

以下 JSON 响应示例,将范围限于 “CityRegion” 文档属性的分面显示为 “城市” 中的嵌套分面。响应包括嵌套分面值的文档数量。

{ 'FacetResults': [ { 'DocumentAttributeKey': 'City', 'DocumentAttributeValueCountPairs': [ { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Dubai' }, 'FacetResults': [ { 'DocumentAttributeKey': 'CityRegion', 'DocumentAttributeValueCountPairs': [ { 'Count': 2, 'DocumentAttributeValue': { 'StringValue': 'Bur Dubai' } }, { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'Deira' } } ] } ] }, { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Seattle' }, 'FacetResults': [ { 'DocumentAttributeKey': 'CityRegion', 'DocumentAttributeValueCountPairs': [ { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'North' } }, { 'Count': 2, 'DocumentAttributeValue': { 'StringValue': 'South' } } ] } ] }, { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'Paris' }, 'FacetResults': [ { 'DocumentAttributeKey': 'CityRegion', 'DocumentAttributeValueCountPairs': [ { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'City center' } } ] } ] } } ] }

使用字符串列表字段创建分面时,返回的分面结果基于字符串列表的内容。例如,如果您有一个包含两个项目的字符串列表字段,一个列表为“dachshund”、“sausage dog”,另一个的值为“husky”,那么 FacetResults 就会得到三个分面。

有关更多信息,请参阅 查询响应和响应类型

使用文档属性筛选搜索结果

默认情况下,Query 会返回所有搜索结果。要筛选响应,可以对文档属性执行逻辑操作。例如,如果您只需要特定城市的文档,则可以筛选“City”和“State”的自定义文档属性。您可以使用AttributeFilter对提供的过滤器创建布尔运算。

大多数属性可用于筛选所有响应类型的响应。但是,_excerpt_page_number 属性仅适用于筛选响应时的 ANSWER 响应类型。

以下示例说明如何通过筛选特定城市(西雅图华盛顿州)来执行逻辑 AND 运算。

response=kendra.query( QueryText = query, IndexId = index, AttributeFilter = {'AndAllFilters': [ {"EqualsTo": {"Key": "City","Value": {"StringValue": "Seattle"}}}, {"EqualsTo": {"Key": "State","Value": {"StringValue": "Washington"}}} ] } )

以下示例说明如何在FileformatAuthorSourceURI键中任意一个与指定值匹配时执行逻辑 OR 运算。

response=kendra.query( QueryText = query, IndexId = index, AttributeFilter = {'OrAllFilters': [ {"EqualsTo": {"Key": "Fileformat","Value": {"StringValue": "AUTO_DETECT"}}}, {"EqualsTo": {"Key": "Author","Value": {"StringValue": "Ana Carolina"}}}, {"EqualsTo": {"Key": "SourceURI","Value": {"StringValue": "https://aws.amazonaws.com/234234242342"}}} ] } )

对于StringList字段,使用ContainsAnyContainsAll属性筛选条件返回包含指定字符串的文档。以下示例说明如何返回Locations自定义属性中值为“Seattle”或“Portland”的所有文档。

response=kendra.query( QueryText = query, IndexId = index, AttributeFilter = { "ContainsAny": { "Key": "Locations", "Value": { "StringListValue": [ "Seattle", "Portland"] }} } )

筛选搜索结果中每个文档的属性

Amazon Kendra 返回搜索结果中每个文档的文档属性。您可以筛选要作为搜索结果一部分包含在响应中的某些文档属性。默认情况下,分配给文档的所有文档属性都将在响应中返回。

在以下示例中,_author文档的响应中仅包含_source_uri和文档属性。

response=kendra.query( QueryText = query, IndexId = index, RequestedDocumentAttributes = ["_source_uri", "_author"] )