

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

# 筛选和分面搜索
<a name="filtering"></a>

**注意**  
功能支持因所用索引类型和搜索 API 而异。要查看您使用的索引类型和搜索 API 是否支持此功能，请参阅[索引类型](https://docs.aws.amazon.com/kendra/latest/dg/hiw-index-types.html)。

您可以使用筛选条件改善来自 [Query](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Query.html) API 的搜索结果或响应。筛选条件将响应中的文档限制为直接应用于查询的文档。要创建分面搜索建议，请使用布尔逻辑从响应或不符合特定条件的文档中筛选出特定的文档属性。您可以使用 `Query` API 中的 `Facets` 参数指定分面。

要搜索已编入索引的 Amazon Kendra 文档 Amazon Lex，请使用[亚马逊。 KendraSearchIntent](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_KendraConfiguration.html)。有关使用进行配置的示例 Amazon Kendra Amazon Lex，请参阅[为 Amazon Kendra 索引创建常见问题解答机器人](https://docs.aws.amazon.com/lexv2/latest/dg/faq-bot-kendra-search.html)。您也可以使用为响应提供过滤器[AttributeFilter](https://docs.aws.amazon.com/kendra/latest/APIReference/API_AttributeFilter.html)。这是配置 `AMAZON.KendraSearchIntent` 时采用 JSON 格式的查询筛选条件。要在控制台中配置搜索意图时提供属性筛选条件，请转到意图编辑器并选择 Amazon Kendra 查询以提供 JSON 格式的查询筛选条件。有关 `AMAZON.KendraSearchIntent` 的更多信息，请参阅 [Amazon Lex 文档](https://docs.aws.amazon.com/lexv2/latest/dg/built-in-intent-kendra-search.html)。

## 分面
<a name="search-facets"></a>

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

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

以下示例显示了如何获取“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](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Query.html) API 并使用所选文档属性筛选结果。

对于查询，每个分面最多可以显示 10 个分面值，并且在一个分面内只能显示一个嵌套分面。如果要增加这些限制，请联系[支持部门](https://aws.amazon.com/contact-us/)。如果要将每个刻面的刻面值数限制为小于 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-responses-types.md)。

## 使用文档属性筛选搜索结果
<a name="search-filtering"></a>

默认情况下，`Query` 会返回所有搜索结果。要筛选响应，可以对文档属性执行逻辑操作。例如，如果您只需要特定城市的文档，则可以筛选“City”和“State”的自定义文档属性。您可以使用[AttributeFilter](https://docs.aws.amazon.com/kendra/latest/APIReference/API_AttributeFilter.html)对提供的过滤器创建布尔运算。

大多数属性可用于筛选所有[响应类型](https://docs.aws.amazon.com/kendra/latest/dg/query-responses-types.html)的响应。但是，`_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"}}}
            ]
            }
        )
```

以下示例说明如何在`Fileformat`、`Author`或`SourceURI`键中任意一个与指定值匹配时执行逻辑 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`字段，使用`ContainsAny`或`ContainsAll`属性筛选条件返回包含指定字符串的文档。以下示例说明如何返回`Locations`自定义属性中值为“Seattle”或“Portland”的所有文档。

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

## 筛选搜索结果中每个文档的属性
<a name="filtering-document-attributes"></a>

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

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

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