

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

# 向索引中添加常见问题 (FAQs)
<a name="in-creating-faq"></a>

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

您可以使用控制台或 [CreateFaq](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateFaq.html)API 将常见问题 (FAQs) 直接添加到索引中。 FAQs 向索引添加是一种异步操作。您将常见问题解答的数据放在 Amazon Simple Storage Service 存储桶中的文件中。您可以使用 CSV 或 JSON 文件作为常见问题解答的输入：
+ 基本 CSV - CSV 文件，其中每行包含一个问题、答案和一个可选的源 URI。
+ 自定义 CSV-包含问题、答案和自定义标题的 CSV 文件 fields/attributes ，可用于对常见问题答复进行分解、显示或排序。您还可以定义访问权限控制字段，将常见问题解答响应限制为仅允许特定用户和组查看。
+ JSON-包含问题、答案和自定义的 JSON 文件 fields/attributes ，可用于对常见问题解答进行分解、显示或排序。您还可以定义访问权限控制字段，将常见问题解答响应限制为仅允许特定用户和组查看。

例如，下面是一个基本 CSV 文件，它提供了有关美国华盛顿州斯波坎和美国密苏里州山景城免费诊所的问题的答案。

```
How many free clinics are in Spokane WA?, 13
How many free clinics are there in Mountain View Missouri?, 7
```

**注意**  
FAQ 文件必须是 UTF-8 编码的文件。

**Topics**
+ [为常见问题文件创建索引字段](#in-custom-fields-faq)
+ [基本 CSV 文件](#faq-basic-csv)
+ [自定义 CSV 文件](#faq-custom-csv)
+ [JSON 文件](#faq-custom-json)
+ [使用常见问题解答文件](#using-faq-file)
+ [其他语言的常见问题解答文件（除英语外）](#faq-languages)

## 为常见问题文件创建索引字段
<a name="in-custom-fields-faq"></a>

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

使用[自定义 CSV](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html#faq-custom-csv) 或 [JSON](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html#faq-custom-json) 文件进行输入时，您可以为常见问题声明自定义字段。例如，您可以创建一个自定义字段，将每个常见问题解答的问题分配一个业务部门。例如，在响应中返回常见问题解答时，您可以使用部门作为一个分面，将搜索范围缩小到“人力资源”或“财务”部门。

自定义字段必须映射到索引字段。在控制台中，您可以使用**分面定义**页面来创建索引字段。使用 API 时，必须先使用 [UpdateIndex](https://docs.aws.amazon.com/kendra/latest/APIReference/API_UpdateIndex.html)API 创建索引字段。

FAQ 文件中的 field/attribute 类型必须与关联索引字段的类型相匹配。例如，“部门”字段是一个 `STRING_LIST` 类型字段。因此，您必须在常见问题解答文件中以字符串列表的形式提供部门字段的值。您可以使用控制台中的 **Facet 定义**页面或使用 [DescribeIndex](https://docs.aws.amazon.com/kendra/latest/APIReference/API_DescribeIndex.html)API 来检查索引字段的类型。

创建映射到自定义属性的索引字段时，您可以将其标记为可显示、可分面或可排序。无法将自定义属性设置为可搜索。

除了自定义属性外，您还可以在自定义 CSV 或 JSON 文件中使用 Amazon Kendra 保留或常用的字段。有关更多信息，请参阅[文档属性或字段](https://docs.aws.amazon.com/kendra/latest/dg/hiw-document-attributes.html)。

## 基本 CSV 文件
<a name="faq-basic-csv"></a>

当您想使用简单的结构时，请使用基本的 CSV 文件 FAQs。在基本 CSV 文件中，每行都有两个或三个字段：问题、答案和指向包含更多信息的文档的可选来源 URI。

文件内容必须符合[逗号分隔值（CSV）文件的 RFC 4180 通用格式和 MIME 类型](https://tools.ietf.org/html/rfc4180)。

下面是基本 CSV 格式的常见问题解答文件。

```
How many free clinics are in Spokane WA?, 13, https://s3.region.company.com/bucket-name/directory/faq.csv
How many free clinics are there in Mountain View Missouri?, 7, https://s3.region.company.com/bucket-name/directory/faq.csv
```

## 自定义 CSV 文件
<a name="faq-custom-csv"></a>

当您想为常见问题解答问题添加自定义内容时， fields/attributes 请使用自定义 CSV 文件。对于自定义 CSV 文件，您可以使用 CSV 文件中的标头行来定义其他属性。

CSV 文件必须包含以下两个必需字段：
+ `_question` - 常见问题
+ `_answer` - 常见问题的答案

您的自定义 CSV 文件可以同时包含 Amazon Kendra 保留字段（`_faq_id`、`_data_source_id``_document_title`、和除外`_file_type`）和任何自定义字段。

 以下是自定义 CSV 文件的示例。

```
_question,_answer,_last_updated_at,custom_string
How many free clinics are in Spokane WA?, 13, 2012-03-25T12:30:10+01:00, Note: Some free clinics require you to meet certain criteria in order to use their services
How many free clinics are there in Mountain View Missouri?, 7, 2012-03-25T12:30:10+01:00, Note: Some free clinics require you to meet certain criteria in order to use their services
```

自定义文件内容必须符合[逗号分隔值（CSV）文件的 RFC 4180 通用格式和 MIME 类型](https://tools.ietf.org/html/rfc4180)。

下面列出了自定义字段的类型：
+ Date - ISO 8601 编码的日期和时间值。

  例如，2012-03-25T12:30:10\$101:00 是中部欧洲时间 2012 年 3 月 25 日中午 12:30（10 秒）的 ISO 8601 日期-时间格式。
+ Long - 数字，例如，`1234`。
+ String - 字符串值。如果字符串包含逗号，请用双引号（"）将整个值括起来（例如，`"custom attribute, and more"`）。
+ String list - 字符串值的列表。列出使用引号（"）括起来的逗号分隔值列表（例如，`"item1, item2, item3"`）。如果列表仅包含一个条目，则可以省略引号（例如，`item1`）。

自定义 CSV 文件可以包含用户访问权限控制字段。您可以使用这些字段将常见问题解答限制为仅某些用户和组可访问。要根据用户上下文进行筛选，用户必须在查询中提供用户和组信息。否则，将返回 FAQs 所有相关内容。有关更多信息，请参阅[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html)。

以下列出了以下用户上下文筛选器 FAQs：
+ `_acl_user_allow` - 允许列表中的用户可以在查询响应中查看常见问题解答。常见问题解答不会返回给其他用户。
+ `_acl_user_deny` - 拒绝列表中的用户无法在查询响应中查看常见问题解答。当常见问题解答与查询相关时，会将其返回给所有其他用户。
+ `_acl_group_allow` - 属于允许群组的用户可以在查询响应中查看常见问题解答。常见问题解答不会返回给属于其他组的成员的用户。
+ `_acl_group_deny` - 属于拒绝组成员的用户无法在查询响应中查看常见问题解答。当常见问题解答与查询相关时，会将其返回给其他组。

在用引号括起来的逗号分隔列表中提供允许和拒绝列表的值（例如，`"user1,user2,user3"`）。您可以将用户或组包含在允许列表或拒绝列表中，但不能将同一用户或组同时包括在允许列表或拒绝列表中。如果将用户或组包含在两者中，则会收到错误。

下面是包含用户上下文信息的自定义 CSV 文件的示例。

```
_question, _answer, _acl_user_allow, _acl_user_deny, _acl_group_allow, _acl_group_deny
How many free clinics are in Spokane WA?, 13, "userID6201,userID7552", "userID1001,userID2020", groupBasicPlusRate, groupPremiumRate
```

## JSON 文件
<a name="faq-custom-json"></a>

您可以使用 JSON 文件为索引提供问题、答案和字段。您可以将任何 Amazon Kendra 保留字段或自定义字段添加到常见问题解答中。

下面是 JSON 文件的架构。

```
{
    "SchemaVersion": 1,
    "FaqDocuments": [
        {
            "Question": string,
            "Answer": string,
            "Attributes": {
                string: object
                additional attributes
            },
            "AccessControlList": [
               {
                   "Name": string,
                   "Type": enum( "GROUP" | "USER" ),
                   "Access": enum( "ALLOW" | "DENY" )
               },
               additional user context
            ]
        },
        additional FAQ documents
    ]
}
```

以下示例 JSON 文件显示了两个常见问题解答文档。其中一个文档只包含所需的问题和答案。另一个文档还包含其他字段和用户上下文或访问权限控制信息。

```
{
    "SchemaVersion": 1,
    "FaqDocuments": [
        {
            "Question": "How many free clinics are in Spokane WA?",
            "Answer": "13"
        },
        {
            "Question": "How many free clinics are there in Mountain View Missouri?",
            "Answer": "7",
            "Attributes": {
                "_source_uri": "https://s3.region.company.com/bucket-name/directory/faq.csv",
                "_category": "Charitable Clinics"
            },
            "AccessControlList": [
               {
                   "Name": "user@amazon.com",
                   "Type": "USER",
                   "Access": "ALLOW"
               },
               {
                   "Name": "Admin",
                   "Type": "GROUP",
                   "Access": "ALLOW"
               }
            ]
        }
    ]
}
```

下面列出了自定义字段的类型：
+ Date - 使用 ISO 8601 编码的日期和时间值的 JSON 字符串值。例如，2012-03-25T12:30:10\$101:00 是中部欧洲时间 2012 年 3 月 25 日中午 12:30（10 秒）的 ISO 8601 日期-时间格式。
+ Long - JSON 数值，例如，`1234`。
+ String - JSON 字符串值（例如，`"custom attribute"`）。
+ String list - 字符串值的 JSON 数组（例如，`["item1,item2,item3"]`）。

JSON 文件可以包含用户访问权限控制字段。您可以使用这些字段将常见问题限制为仅某些用户和组可访问。要根据用户上下文进行筛选，用户必须在查询中提供用户和组信息。否则，将返回 FAQs 所有相关内容。有关更多信息，请参阅[用户上下文筛选](https://docs.aws.amazon.com/kendra/latest/dg/user-context-filter.html)。

您可以将用户或组包含在允许列表或拒绝列表中，但不能将同一用户或组同时包括在允许列表或拒绝列表中。如果将用户或组包含在两者中，则会收到错误。

下面是 JSON 常见问题解答中包含用户访问权限控制的示例。

```
"AccessControlList": [
                {
                    "Name": "group or user name",
                    "Type": "GROUP | USER",
                    "Access": "ALLOW | DENY"
                },
                additional user context
            ]
```

## 使用常见问题解答文件
<a name="using-faq-file"></a>

将常见问题解答输入文件存储在 S3 存储桶中后，您可以使用控制台或 `CreateFaq` API 将问题和答案编入索引中。如果要更新常见问题解答，请删除该常见问题解答并重新创建。您可以使用 `DeleteFaq` API 删除常见问题解答。

您必须提供一个有权访问包含您的源文件的 S3 存储桶的 IAM 角色。您可以在控制台或 `RoleArn` 参数中指定该角色。下面是将常见问题解答文件添加到索引中的示例。

------
#### [ Python ]

```
import boto3

kendra = boto3.client("kendra")

# Provide the index ID
index_id = "index-id"
# Provide the IAM role ARN required to index documents in an S3 bucket
role_arn = "arn:aws:iam::${accountId}:role/${roleName}"

# Provide the S3 bucket path information to the FAQ file
faq_path = {
    "Bucket": "bucket-name",
    "Key": "FreeClinicsUSA.csv"
}

response = kendra.create_faq(
    S3Path =  faq_path,
    Name = "FreeClinicsUSA",
    IndexId = index_id,
    RoleArn = role_arn
)

print(response)
```

------
#### [ Java ]

```
package com.amazonaws.kendra;

import software.amazon.awssdk.services.kendra.KendraClient;
import software.amazon.awssdk.services.kendra.model.CreateFaqRequest;
import software.amazon.awssdk.services.kendra.model.CreateFaqResponse;
import software.amazon.awssdk.services.kendra.model.S3Path;

public class AddFaqExample {
    public static void main(String[] args) {
        KendraClient kendra = KendraClient.builder().build();

        String indexId = "yourIndexId";
        String roleArn = "your role for accessing S3 files";

        CreateFaqRequest createFaqRequest = CreateFaqRequest
            .builder()
            .indexId(indexId)
            .name("FreeClinicsUSA")
            .roleArn(roleArn)
            .s3Path(
                S3Path
                    .builder()
                    .bucket("amzn-s3-demo-bucket")
                    .key("FreeClinicsUSA.csv")
                    .build())
            .build();

        CreateFaqResponse response = kendra.createFaq(createFaqRequest);

        System.out.println(String.format("The result of creating FAQ: %s", response));

    }
}
```

------

## 其他语言的常见问题解答文件（除英语外）
<a name="faq-languages"></a>

您可以使用支持的语言为常见问题解答编制索引。 Amazon Kendra 如果您未指定语言，则默认使用英语进行索引 FAQs 。您可以在调用[CreateFaq](https://docs.aws.amazon.com/kendra/latest/APIReference/API_CreateFaq.html)操作时指定语言代码，也可以将常见问题解答的语言代码作为字段包含在常见问题元数据中。如果没有在元数据字段的元数据中指定常见问题解答的语言代码，则使用您在调用该 `CreateFAQ` 操作时指定的语言代码来为常见问题解答编制索引。要在控制台中以支持的语言为常见问题解答文档编制索引，请转至**FAQs**并选择**添加常见问题解答**。您可以从**语言**下拉列表中选择语言。