

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# インデックスへのカスタムシノニムの追加
<a name="index-synonyms"></a>

カスタムシノニムをインデックスに追加するには、シソーラスファイルでシノニムを指定します。シノニム Amazon Kendra を使用して、ビジネス固有または特殊な用語を に含めることができます。などの一般的な英語シノニムは `leader, head`に組み込まれ Amazon Kendra ており、ハイフンを使用する一般的なシノニムを含むシソーラスファイルに含めることはできません。 Amazon Kendra は、レスポンスタイプや `QUESTION_ANSWER`または `DOCUMENT`レスポンスタイプを含むすべての`ANSWER`レスポンスタイプのシノニムをサポートしています。 Amazon Kendra は現在、ストップワードとしてフラグ付けされたシノニムの追加をサポートしていません。これは、将来のリリースに組み込まれます。

Amazon Kendra はシノニム間の相関を行います。たとえば、シノニムペア を使用すると`Dynamo, Amazon DynamoDB`、 は Dynamo を と Amazon Kendra 関連付けます Amazon DynamoDB。「What is dynamo?」というクエリは、次に、「What is Amazon DynamoDB?」などのドキュメントを返します。シノニムを使用すると、 は相関をより簡単に取得 Amazon Kendra できます。

シソーラスファイルは、 Amazon S3 バケットに保存されているテキストファイルです。「[シソーラスをインデックスに追加する](index-synonyms-adding-thesaurus-file.md)」を参照してください。

シソーラスファイルは [Solr シノニム形式](https://lucene.apache.org/solr/guide/6_6/filter-descriptions.html#FilterDescriptions-SynonymGraphFilter)を使用します。インデックスあたりのシソーラスの数には制限 Amazon Kendra があります。[クォータ](https://docs.aws.amazon.com/kendra/latest/dg/quotas.html)を参照してください。

シノニムは、次のシナリオで役立ちます。
+ 例えば、`NLP, Natural Language Processing` など、従来の英語のシノニムではない専門用語。
+ 複雑な意味的関連を持つ固有名詞。例えば、機械学習では、`cost, loss, model performance` など、これらは一般の人が理解しにくい名詞です。
+ 例えば、`Elastic Compute Cloud, EC2` などの異なる形式の製品名。
+ 製品名など、ドメイン固有またはビジネス固有の用語。例えば、`Route53, DNS`。

次のシナリオではシノニムを使用しないでください。
+ `leader, head` など、一般的な英語のシノニム。これらのシノニムはドメイン固有ではなく、これらのシナリオでシノニムを使用すると、意図しない効果が生じる可能性があります。
+ `teh => the` などの誤字。
+ 名詞の複数形や所有格、形容詞の比較形および最上級形、動詞の過去形、過去分詞形、進行形のような形態学的変種。比較形容詞と最上級形容詞の一例は、`good, better, best` です。
+ `WHO` などのユニグラム (1 単語) ストップワード。ユニグラムストップワードはシソーラスでは許可されず、検索から除外されます。例えば、`WHO => World Health Organization` は拒否されます。`W.H.O.` をシノニム用語として使用できますが、ストップワードをマルチワードシノニムの一部として使うことができます。例えば、`of` は許可されますが、`United States of America` は許可されません。

カスタムシノニムを使用すると、ビジネス固有のシノニムをカバーするようにクエリを拡張することで、ビジネス固有の用語 Amazon Kendraの理解を簡単に向上させることができます。シノニムは検索の精度を向上させることができますが、シノニムがレイテンシーにどのように影響するかを理解して最適化することが重要です。

シノニムの一般的なルールは、クエリ内のシノニムと一致して拡張される用語が多いほど、レイテンシーへの影響が大きくなります。レイテンシーに影響するその他の要因には、インデックス化されたドキュメントの平均サイズ、インデックスのサイズ、検索結果のフィルタリング、 Amazon Kendra インデックスの全体的な負荷などがあります。シノニムと一致しないクエリは影響を受けません。

シノニムがレイテンシーにどのように影響するかに関する一般的なガイドライン:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/kendra/latest/dg/index-synonyms.html)

\$1*パフォーマンスは、インデックスでのシノニムと構成の特定の使用方法によって異なります。検索のパフォーマンスをテストして、特定のユースケースに対してより正確なベンチマークを取得することをお勧めします。*

シソーラスが大きく、用語の拡張率が高く、レイテンシーの増加が許容範囲内にない場合は、次のいずれかまたは両方を試してください。
+ シソーラスをトリミングして、拡張率 (用語ごとのシノニム数) を減らします。
+ 用語の全体的な範囲 (シソーラスの行数) をトリミングします。

または、プロビジョニングキャパシティ (仮想ストレージユニット) を増やして、レイテンシーの増加を相殺することもできます。

**Topics**
+ [シソーラスファイルの作成](index-synonyms-creating-thesaurus-file.md)
+ [シソーラスをインデックスに追加する](index-synonyms-adding-thesaurus-file.md)
+ [シソーラスを更新する](index-synonyms-update.md)
+ [シソーラスを削除する](index-synonyms-delete.md)
+ [検索結果の強調表示](index-synonyms-enabling-synonyms-in-results.md)

# シソーラスファイルの作成
<a name="index-synonyms-creating-thesaurus-file"></a>

 Amazon Kendra シソーラスファイルは、Solr シノニムリスト形式のシノニムのリストを含む UTF-8-encodedされたファイルです。シソーラスファイルは 5 MB 未満である必要があります。

シノニムのマッピングを指定するには、2 つの方法があります。
+ *双方向シノニム*は、用語をカンマで区切ったリストとして指定します。ユーザーがいずれかの用語を検索する場合、リスト内のすべての用語がドキュメント検索に使用されます。これには、クエリされた元の用語も含まれます。
+ *単方向シノニム*は、用語をシノニムにマッピングするために、「=>」で区切られた用語として指定されます。記号「=>」の左側にある用語をユーザーが検索すると、その用語は右側の用語にマップされ、シノニムを使用しているドキュメントを検索します。その逆はマッピングされないため、単方向になります。

シノニム自体では大文字と小文字が区別されますが、マップ先の用語では大文字と小文字は区別されません。例えば `ML => Machine Learning` の場合、ユーザーが「ML」や「ml」を検索したり、大文字小文字のその他の組み合わせを使用したりすると、「Machine Learning」にマッピングされます。逆に、`Machine Learning => ML` をマッピングすると、「Machine Learning」や「machine learning」、およびその他に組み合わせが、「ML」にマッピングされます。

シノニムでは、特殊文字の完全一致は検索されません。たとえば、dead-letter-queue」を検索すると、 は「dead letter queue」に一致するドキュメントを返す Amazon Kendra ことができます (ハイフンなし）。ドキュメントにdead-letter-queue」などのハイフンが含まれている場合、 は検索中にドキュメント Amazon Kendra を処理してハイフンを削除します。に組み込まれており、シソーラスファイルに含める Amazon Kendra べきではない一般的な英語シノニム用語の場合、 は用語のハイフンバージョンと非ハイフンバージョンの両方を検索 Amazon Kendra できます。たとえば、「サードパーティー」と「サードパーティー」を検索すると、 はこれらの用語のいずれかのバージョンに一致するドキュメント Amazon Kendra を返します。

ストップワードまたは一般的に使用される単語を含むシノニムの場合、 はストップワードを含む用語に一致するドキュメント Amazon Kendra を返します。例えば、「on boarding」と「onboarding」をマッピングするシノニムルールを作成することができます。シノニムにストップワードを単独で使用することはできません。たとえば、「on」を検索すると、「on」を含むすべてのドキュメント Amazon Kendra を返すことはできません。

一部のシノニムルールは無視されます。例えば、`a => b` はルールですが、`a => a` は無視され、ルールとしてカウントされません。

用語数は、シソーラスファイル内の一意の用語の数です。以下のサンプルファイルには、`AWS CodeStar`、`ML`、`Machine Learning`、`autoscaling group`、`ASG` などの用語が含まれています。

シソーラスあたりのシノニムルールの最大数と用語あたりのシノニムの最大数があります。詳細については、「[のクォータ Amazon Kendra](quotas.md)」を参照してください。

次の例は、シノニムルールを含むシソーラスファイルを示しています。各行には 1 つのシノニムルールが含まれています。空白行とコメントは無視されます。

```
# Lines starting with pound are comments and blank lines are ignored.

# Synonym relationships can be defined as unidirectional or bidirectional relationships.

# Unidirection relationships are represented by any term sequence 
# on the left hand side (LHS) of "=>" followed by synonyms on the right hand side (RHS)
CodeStar => AWS CodeStar
# This will map CodeStar to AWS CodeStar, but not vice-versa

# To map terms vice versa
ML => Machine Learning
Machine Learning => ML

# Multiple synonym relationships may be defined in one line as well by comma seperation.
autoscaling group, ASG => Auto Scaling group, autoscaling
# The above is equivalent to:
# autoscaling group => Auto Scaling group, autoscaling
# ASG => Auto Scaling group, autoscaling

# Bi-directional synonyms are comma separated terms with no "=>"
DNS, Route53, Route 53
# DNS, Route53, and Route 53 map to one another and are interchangeable at match time
# The above is equivalent to:
# DNS => Route53, Route 53
# Route53 => DNS, Route 53
# Route 53 => DNS, Route53

# Overlapping LHS terms will be merged
Beta => Alpha
Beta => Gamma
Beta, Delta
# is equivalent to:
# Beta => Alpha, Gamma, Delta
# Delta => Beta

# Each line contains a single synonym rule.
# Synonym rule count is the total number of lines defining synonym relationships
# Term count is the total number of unique terms for all rules.  
# Comments and blanks lines do not count.
```

# シソーラスをインデックスに追加する
<a name="index-synonyms-adding-thesaurus-file"></a>

以下の手順は、シノニムを含むシソーラスファイルをインデックスに追加する方法を示しています。更新されたシソーラスファイルの効果を確認するのに最大 30 分かかる場合があります。シソーラスファイルの詳細については、[シソーラスファイルの作成](index-synonyms-creating-thesaurus-file.md) を参照してください。

------
#### [ Console ]

**シソーラスを追加するには**

1. 左側のナビゲーションペインで、シノニムのリスト、シソーラスを追加するインデックスで、**[Synonyms]** (シノニム) を選択します。

1. **[Synonym]** (シノニム) ページで、**[Add Thesaurus]** (シソーラスを追加) を選択します。

1. **[Define thesaurus]** (シソーラスを定義) で、シソーラスに名前とオプションの説明を付けます。

1. **シソーラス設定**で、シソーラスファイルへの Amazon S3 パスを指定します。ファイルは 5 MB より小さくなければなりません。

1. **IAM ロール**の場合は、ロールを選択するか、**新しいロールの作成**を選択し、ロール名を指定して新しいロールを作成します。 はこのロール Amazon Kendra を使用してユーザーに代わって Amazon S3 リソースにアクセスします。IAM ロールには、プレフィックス「AmazonKendra-」があります。

1. **[Save]** (保存) をクリックして設定を保存し、シソーラスを追加します。シソーラスが取り込まれると、そのシソーラスがアクティブになり、結果でシノニムが強調表示されます。シソーラスファイルの効果を確認するのに最大 30 分かかる場合があります。

------
#### [ CLI ]

を使用してインデックスにシサラスを追加するには AWS CLI、 を呼び出します`create-thesaurus`。

```
aws kendra create-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
```

`list-thesauri` を呼び出してシソーラスのリストを表示します。

```
aws kendra list-thesauri \
--index-id index-id
```

シソーラスの詳細を表示するには、`describe-thesaurus` を呼び出します。

```
aws kendra describe-thesaurus \
--index-id index-id \
--index-id thesaurus-id
```

シソーラスファイルの効果を確認するのに最大 30 分かかる場合があります。

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

```
import boto3
from botocore.exceptions import ClientError
import pprint
import time

kendra = boto3.client("kendra")

print("Create a thesaurus")

thesaurus_name = "thesaurus-name"
thesaurus_description = "thesaurus-description"
thesaurus_role_arn = "role-arn"

index_id = "index-id"

s3_bucket_name = "bucket-name"
s3_key = "thesaurus-file"
source_s3_path= {
    'Bucket': s3_bucket_name,
    'Key': s3_key
}

try:
    thesaurus_response = kendra.create_thesaurus(
        Description = thesaurus_description,
        Name = thesaurus_name,
        RoleArn = thesaurus_role_arn,
        IndexId = index_id,
        SourceS3Path = source_s3_path
    )

    pprint.pprint(thesaurus_response)

    thesaurus_id = thesaurus_response["Id"]

    print("Wait for Kendra to create the thesaurus.")

    while True:
        # Get thesaurus description
        thesaurus_description = kendra.describe_thesaurus(
            Id = thesaurus_id,
            IndexId = index_id
        )
        # If status is not CREATING quit
        status = thesaurus_description["Status"]
        print("Creating thesaurus. Status: " + status)
        if status != "CREATING":
            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.CreateThesaurusRequest;
import software.amazon.awssdk.services.kendra.model.CreateThesaurusResponse;
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 CreateThesaurusExample {

  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 indexId = "index-id";

    System.out.println(String.format("Creating a thesaurus named %s", thesaurusName));
    CreateThesaurusRequest createThesaurusRequest = CreateThesaurusRequest
        .builder()
        .name(thesaurusName)
        .indexId(indexId)
        .description(thesaurusDescription)
        .roleArn(thesaurusRoleArn)
        .sourceS3Path(S3Path.builder()
            .bucket(s3BucketName)
            .key(s3Key)
            .build())
        .build();
    CreateThesaurusResponse createThesaurusResponse = kendra.createThesaurus(createThesaurusRequest);
    System.out.println(String.format("Thesaurus response %s", createThesaurusResponse));

    String thesaurusId = createThesaurusResponse.id();

    System.out.println(String.format("Waiting until the thesaurus with ID %s is created.", thesaurusId));

    while (true) {
      DescribeThesaurusRequest describeThesaurusRequest = DescribeThesaurusRequest.builder()
          .id(thesaurusId)
          .indexId(indexId)
          .build();
      DescribeThesaurusResponse describeThesaurusResponse = kendra.describeThesaurus(describeThesaurusRequest);
      ThesaurusStatus status = describeThesaurusResponse.status();
      if (status != ThesaurusStatus.CREATING) {
        break;
      }

      TimeUnit.SECONDS.sleep(60);
    }

    System.out.println("Thesaurus creation is complete.");
  }
}
```

------

# シソーラスを更新する
<a name="index-synonyms-update"></a>

シソーラスの作成後に設定を変更することができます。シソーラス名や IAM 情報などの詳細を変更できます。シソーラスファイル Amazon S3 パスの場所を変更することもできます。シソーラスファイルへのパスを変更すると、 Amazon Kendra は既存のシソーラスを、更新されたパスで指定されたシソーラスに置き換えます。

更新されたシソーラスファイルの効果を確認するのに最大 30 分かかる場合があります。

**注記**  
シソーラスファイルに検証エラーまたは構文エラーがある場合、以前にアップロードされたシソーラスファイルは保持されます。

以下の手順は、シソーラスの詳細を変更する方法を示しています。

------
#### [ Console ]

**シソーラスの詳細を変更するには**

1. 左側のナビゲーションペインの変更するインデックスで、**[Synonyms]** (シノニム) を選択します。

1. **[Synonym]** (シノニム) ページで、変更するシソーラスを選択し、**[Edit]** (編集) を選択します。

1. **[Update thesaurus]** (シソーラスを更新) ページで、シソーラスの詳細を更新します。

1. (オプション) **シソーラスファイルパスを変更**を選択し、新しいシソーラスファイルへの Amazon S3 パスを指定します。既存のシソーラスファイルは、指定したファイルに置き換えられます。パスを変更しない場合、 は既存のパスからシソーラス Amazon Kendra を再ロードします。

   **現在のシソーラスファイルを保持** を選択した場合、 Amazon Kendra はシソーラスファイルを再ロードしません。

1. **[Save]** (保存) を選択して設定を保存します。

既存のシソーラスパスからシソーラスをリロードすることもできます。

**既存のパスからシソーラスをリロードするには**

1. 左側のナビゲーションペインの変更するインデックスで、**[Synonyms]** (シノニム) を選択します。

1. **[シノニム]** ページで、リロードするシソーラスを選択し、**[更新]** を選択します。

1. **[シソーラスファイルのリロード]** ページで、シソーラスファイルを更新することを確認します。

------
#### [ 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.");
  }
}
```

------

# シソーラスを削除する
<a name="index-synonyms-delete"></a>

以下の手順は、シソーラスを削除する方法を示しています。

------
#### [ Console ]

1. 左側のナビゲーションペインの変更するインデックスで、**[Synonyms]** (シノニム) を選択します。

1. **[Synonym]** (シノニム) ページで、削除するシソーラスを選択します。

1. **[Thesaurus detail]** (シソーラスの詳細) ページで、**[Delete]** (削除) を選択し、削除を確定します。

------
#### [ CLI ]

を使用してインデックスのサラスを削除するには AWS CLI、 を呼び出します`delete-thesaurus`。

```
aws kendra delete-thesaurus \
--index-id index-id \
--id thesaurus-id
```

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

```
import boto3
from botocore.exceptions import ClientError

kendra = boto3.client("kendra")

print("Delete a thesaurus")

thesaurus_id = "thesaurus-id"
index_id = "index-id"

try:
    kendra.delete_thesaurus(
        Id = thesaurus_id,
        IndexId = index_id
    )

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.DeleteThesaurusRequest;

public class DeleteThesaurusExample {

  public static void main(String[] args) throws InterruptedException {

    KendraClient kendra = KendraClient.builder().build();

    String thesaurusId = "thesaurus-id";
    String indexId = "index-id";

    DeleteThesaurusRequest updateThesaurusRequest = DeleteThesaurusRequest
        .builder()
        .id(thesaurusId)
        .indexId(indexId)
        .build();
    kendra.deleteThesaurus(updateThesaurusRequest);
  }
}
```

------

# 検索結果の強調表示
<a name="index-synonyms-enabling-synonyms-in-results"></a>

シノニムの強調表示はデフォルトでオンになっています。ハイライト情報は Amazon Kendra SDK および CLI クエリ結果に含まれています。SDK または CLI Amazon Kendra を使用して を操作する場合は、結果の表示方法を決定します。

シノニム強調表示には強調表示タイプ `THESAURUS_SYNONYM` があります。ハイライトの詳細については、「[Highlight](https://docs.aws.amazon.com/kendra/latest/APIReference/API_Highlight.html)」オブジェクトを参照してください。