向索引中添加常见问题 (FAQs) - Amazon Kendra

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

向索引中添加常见问题 (FAQs)

您可以使用控制台或将常见问题 (FAQs) 直接添加到索引中CreateFaqAPI。FAQs向索引添加是一种异步操作。您将的数据放在FAQ存储 Amazon Simple Storage Service 桶中的文件中。你可以使用CSV或JSON文件作为你的FAQ以下内容的输入:

  • 基CSV本-每行包含问题、答案和可选来源的CSV文件URI。

  • 自定义 CSV-包含问题、答案和自定义字段/属性的标题的CSV文件,您可以使用这些字段/属性对答案进行分解、显示或排序。FAQ您还可以定义访问控制字段,将FAQ响应限制为允许查看FAQ响应的特定用户和群组。

  • JSON— 一个包含问题、答案和自定义字段/属性的JSON文件,您可以使用这些字段/属性对答案进行分解、显示或排序。FAQ您还可以定义访问控制字段,将FAQ响应限制为允许查看FAQ响应的特定用户和群组。

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

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

该FAQ文件必须是 UTF -8 编码的文件。

为FAQ文件创建索引字段

使用自定义CSVJSON文件进行输入时,您可以为FAQ问题声明自定义字段。例如,您可以创建一个自定义字段,为每个FAQ问题分配一个业务部门。例如,FAQ当响应中返回时,您可以使用部门作为分面,将搜索范围缩小到 “HR” 或 “财务”。

自定义字段必须映射到索引字段。在控制台中,您可以使用分面定义页面来创建索引字段。使用时API,必须先使用创建索引字段UpdateIndexAPI。

FAQ文件中的字段/属性类型必须与关联索引字段的类型相匹配。例如,“部门”字段是一个 STRING_LIST 类型字段。因此,您必须在FAQ文件中以字符串列表的形式提供部门字段的值。您可以使用控制台中的 Facet 定义页面或使用来检查索引字段的类型。DescribeIndexAPI

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

除了自定义属性外,您还可以在自定义CSV或JSON文件中使用 Amazon Kendra 保留或常用字段。有关更多信息,请参阅文档属性或字段

基本CSV文件

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

文件内容必须遵循逗号分隔值 () CSV 文件的 RFC 4180 通用格式和MIME类型

以下是基本CSV格式的FAQ文件。

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文件

如果要为问题添加自定义字段/属性,请FAQ使用自定义CSV文件。对于自定义CSV文件,您可以使用CSV文件中的标题行来定义其他属性。

该CSV文件必须包含以下两个必填字段:

  • _question - 常见问题

  • _answer - 常见问题的答案

您的文件可以包含 Amazon Kendra 保留字段和自定义字段。以下是自定义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类型

下面列出了自定义字段的类型:

  • 日期-ISO 8601 编码的日期和时间值。

    例如,2012-03-25T12:30:10 + 01:00 是 2012 年 3 月 25 日中欧时区下午 12:30(加 10 秒)的 ISO 8601 日期时间格式。

  • Long - 数字,例如,1234

  • String - 字符串值。如果字符串包含逗号,请用双引号(")将整个值括起来(例如,"custom attribute, and more")。

  • String list - 字符串值的列表。列出使用引号(")括起来的逗号分隔值列表(例如,"item1, item2, item3")。如果列表仅包含一个条目,则可以省略引号(例如,item1)。

自定义CSV文件可以包含用户访问控制字段。您可以使用这些字段来限制某些用户和群组的FAQ访问权限。要根据用户上下文进行筛选,用户必须在查询中提供用户和组信息。否则,将返回FAQs所有相关内容。有关更多信息,请参阅用户上下文筛选

以下列出了以下用户上下文筛选器FAQs:

  • _acl_user_allow— 允许列表中的用户可以在查询响应FAQ中看到。FAQ不会返回给其他用户。

  • _acl_user_deny— 拒绝列表中的用户无法在查询响应FAQ中看到。当FAQ它与查询相关时,会将其返回给所有其他用户。

  • _acl_group_allow— 属于允许组成员的用户可以在查询响应FAQ中看到。FAQ不会向属于其他群组成员的用户返回。

  • _acl_group_deny— 属于被拒绝群组成员的用户无法在查询响应FAQ中看到。当FAQ它与查询相关时,会将其返回给其他组。

在用引号括起来的逗号分隔列表中提供允许和拒绝列表的值(例如,"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文件

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

以下是该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文件显示了两个FAQ文档。其中一个文档只包含所需的问题和答案。另一个文档还包含其他字段和用户上下文或访问权限控制信息。

{ "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" } ] } ] }

下面列出了自定义字段的类型:

  • 日期-具有 ISO 8601 编码的日期和时间值的JSON字符串值。例如,2012-03-25T12:30:10 + 01:00 是 2012 年 3 月 25 日中欧时区下午 12:30(加 10 秒)的 ISO 8601 日期时间格式。

  • Long-JSON 数字值,例如。1234

  • JSON字符串-字符串值(例如,"custom attribute")。

  • 字符串列表-字符串值JSON数组(例如,["item1,item2,item3"])。

JSON文件可以包含用户访问控制字段。您可以使用这些字段来限制某些用户和群组的FAQ访问权限。要根据用户上下文进行筛选,用户必须在查询中提供用户和组信息。否则,将返回FAQs所有相关内容。有关更多信息,请参阅用户上下文筛选

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

以下是包含用户访问控制的示例JSONFAQ。

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

使用你的FAQ文件

将FAQ输入文件存储在 S3 存储桶中后,您可以使用控制台或CreateFaqAPI将问题和答案放入索引中。如果要更新FAQ,请删除FAQ并重新创建。您可以使用删除FAQ。DeleteFaq API

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

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)); } }

FAQ英语以外其他语言的文件

您可以使用支持的语言对 FAQ a进行索引。 Amazon Kendra 如果您未指定语言,则默认使用英语进行索引FAQs。您可以在调用CreateFaq操作时指定语言代码,也可以将的语言代码作为字段包含FAQ在FAQ元数据中。如果 a 的元数据中FAQ没有在元数据字段中指定的语言代码,FAQ则使用调用该CreateFAQ操作时指定的语言代码为其编制索引。要在控制台中使用支持的语言为FAQ文档编制索引,请转至FAQs并选择添加FAQ。您可以从语言下拉列表中选择语言。