筛选和分面搜索 - Amazon Kendra

筛选和分面搜索

注意

功能支持因所用索引类型和搜索 API 而异。要查看您使用的索引类型和搜索 API 是否支持此功能,请参阅索引类型

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

要搜索已使用 Amazon Lex 的 Amazon Kendra 编入索引的文档,请使用 AMAZON.KendraSearchIntent。有关使用 Amazon Lex 配置 Amazon Kendra 的示例,请参阅为 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”包括分配给“Seattle”的文档的“North”和“South”值。您可以在搜索结果中显示嵌套的刻面及其计数,这样不仅可以按城市搜索文档,还可以按城市内的区域搜索文档。

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

以下示例显示如何获取“CityRegion”自定义属性的分面信息,该属性是“City”中的嵌套分面。

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”文档属性的分面显示为“City”中的嵌套分面。响应包括嵌套分面值的文档数量。

{ '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"] )