更新同义词库 - Amazon Kendra

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

更新同义词库

在创建同义词库后,您可以更改其配置。您可以更改同义词库名称和 IAM 信息之类的详细信息。您也可以更改同义词库文件位置的 Amazon S3 路径。如果更改同义词库文件的路径,则 Amazon Kendra 会将现有同义词库替换为更新后的路径中指定的同义词库。

要了解更新后的同义词库文件的效果,最多可能需要 30 分钟。

注意

如果同义词库文件中存在验证或语法错误,则会保留之前上传的同义词库文件。

以下过程说明如何修改同义词库的详细信息。

Console
修改同义词库的详细信息
  1. 在左侧导航窗格中要修改的索引下,选择同义词

  2. 同义词页面上,选择要修改的同义词库,然后选择编辑

  3. 更新同义词库页面上,更新同义词库详细信息。

  4. (可选)选择 “更改同义词库文件路径”,然后指定新同义词库文件的 Amazon S3 路径。您的现有同义词库文件将替换为您指定的文件。如果不更改路径,则从现有路径 Amazon Kendra 重新加载同义词库。

    如果选择 “保留当前同义词库文件”,则 Amazon Kendra 不会重新加载同义词库文件。

  5. 选择保存以保存配置。

您也可以从现有同义词库路径重新加载同义词库。

从现有路径重新加载同义词库
  1. 在左侧导航窗格中要修改的索引下,选择同义词

  2. 同义词页面上,选择要重新加载的同义词库,然后选择刷新

  3. 重新加载同义词库文件页面上,确认要刷新同义词库文件。

CLI

要更新同义词库,请调用 update-thesaurus

aws kendra update-thesaurus \ --index-id index-id \ --name "thesaurus-name" \ --description "thesaurus-description" \ --source-s3-path "Bucket=bucket-name,Key=thesaurus/synonyms.txt" \ --role-arn role-arn
Python
import boto3 from botocore.exceptions import ClientError import pprint import time kendra = boto3.client("kendra") print("Update a thesaurus") thesaurus_name = "thesaurus-name" thesaurus_description = "thesaurus-description" thesaurus_role_arn = "role-arn" thesaurus_id = "thesaurus-id" index_id = "index-id" s3_bucket_name = "bucket-name" s3_key = "thesaurus-file" source_s3_path= { 'Bucket': s3_bucket_name, 'Key': s3_key } try: kendra.update_thesaurus( Id = thesaurus_id, IndexId = index_id, Description = thesaurus_description, Name = thesaurus_name, RoleArn = thesaurus_role_arn, SourceS3Path = source_s3_path ) print("Wait for Kendra to update the thesaurus.") while True: # Get thesaurus description thesaurus_description = kendra.describe_thesaurus( Id = thesaurus_id, IndexId = index_id ) # If status is not UPDATING quit status = thesaurus_description["Status"] print("Updating thesaurus. Status: " + status) if status != "UPDATING": break time.sleep(60) except ClientError as e: print("%s" % e) print("Program ends.")
Java
package com.amazonaws.kendra; import software.amazon.awssdk.services.kendra.KendraClient; import software.amazon.awssdk.services.kendra.model.UpdateThesaurusRequest; import software.amazon.awssdk.services.kendra.model.DescribeThesaurusRequest; import software.amazon.awssdk.services.kendra.model.DescribeThesaurusResponse; import software.amazon.awssdk.services.kendra.model.S3Path; import software.amazon.awssdk.services.kendra.model.ThesaurusStatus; public class UpdateThesaurusExample { public static void main(String[] args) throws InterruptedException { KendraClient kendra = KendraClient.builder().build(); String thesaurusName = "thesaurus-name"; String thesaurusDescription = "thesaurus-description"; String thesaurusRoleArn = "role-arn"; String s3BucketName = "bucket-name"; String s3Key = "thesaurus-file"; String thesaurusId = "thesaurus-id"; String indexId = "index-id"; UpdateThesaurusRequest updateThesaurusRequest = UpdateThesaurusRequest .builder() .id(thesaurusId) .indexId(indexId) .name(thesaurusName) .description(thesaurusDescription) .roleArn(thesaurusRoleArn) .sourceS3Path(S3Path.builder() .bucket(s3BucketName) .key(s3Key) .build()) .build(); kendra.updateThesaurus(updateThesaurusRequest); System.out.println(String.format("Waiting until the thesaurus with ID %s is updated.", thesaurusId)); // a new source s3 path requires re-consumption by Kendra // and so can take as long as a Create Thesaurus operation while (true) { DescribeThesaurusRequest describeThesaurusRequest = DescribeThesaurusRequest.builder() .id(thesaurusId) .indexId(indexId) .build(); DescribeThesaurusResponse describeThesaurusResponse = kendra.describeThesaurus(describeThesaurusRequest); ThesaurusStatus status = describeThesaurusResponse.status(); if (status != ThesaurusStatus.UPDATING) { break; } TimeUnit.SECONDS.sleep(60); } System.out.println("Thesaurus update is complete."); } }