フィルタリングとファセット検索 - Amazon Kendra

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

フィルタリングとファセット検索

フィルターを使用すると、クエリ API からの検索結果またはレスポンスを改善できます。フィルターにより、レスポンス内のドキュメントはクエリに直接適用するドキュメントに制限されます。ファセット検索候補を作成するには、ブール論理を使用して、特定の条件に一致しないレスポンスまたはドキュメントから、特定のドキュメント属性をフィルタリングします。Query API Facets のパラメータを使用して、ファセットを指定できます。

Amazon Kendra のインデックスを作成したドキュメントを検索するには Amazon Lex、AMAZON を使用しますKendraSearchIntent。で を設定する Amazon Kendra 例については Amazon Lex、Amazon Kendra 「インデックス のよくある質問ボットの作成」を参照してください。を使用してレスポンスのフィルターを指定することもできますAttributeFilter。これは、AMAZON.KendraSearchIntent の設定時の JSON のクエリフィルターです。コンソールで検索インテントを設定する際に属性フィルターを指定するには、インテントエディタに移動し、[ Amazon Kendra query] を選択して JSON でクエリフィルターを指定します。AMAZON.KendraSearchIntent の詳細については、「Amazon Lex ドキュメントガイド」を参照してください。

ファセット

ファセットは、一連の検索結果の対象範囲内のビューです。例えば、世界中の都市の検索結果を提供できます。この場合、ドキュメントは関連する特定の都市でフィルタリングされます。または、ファセットを作成して、特定の作成者の結果を表示できます。

ドキュメントに関連付けられているドキュメント属性またはメタデータフィールドをファセットとして使用すると、ユーザーはそのファセット内のカテゴリまたは値で検索できます。また、検索結果にネストされたファセットを表示すると、ユーザーはカテゴリやフィールドだけでなく、サブカテゴリやサブフィールドでも検索できます。

次の例は、「City」というカスタム属性のファセット情報を取得する方法を示しています。

response=kendra.query( QueryText = query, IndexId = index, Facets = [ { "DocumentAttributeKey" : "City" } ] )

ネストされたファセットを使用すると、検索をさらに絞り込むことができます。例えば、ドキュメント属性またはファセット「City」には、「Seattle」という値が含まれています。さらに、ドキュメント属性またはファセットCityRegion「」には、「シアトル」に割り当てられたドキュメントの「北」と「南」の値が含まれます。検索結果にはネストされたファセットとその数を表示できるため、都市だけでなく都市内の地域でもドキュメントを検索できます。

ネストされたファセットは、クエリのレイテンシーに影響する可能性があることに注意してください。一般的に、ネストされたファセットの使用が多いほど、レイテンシーへの影響が大きくなります。レイテンシーに影響を与えるその他の要因には、インデックスが作成されたドキュメントの平均サイズ、インデックスのサイズ、非常に複雑なクエリ、 Amazon Kendra インデックスの全体的な負荷などがあります。

次の例は、「City」内のネストされたファセットとして、CityRegion「」カスタム属性のファセット情報を取得する方法を示しています。

response=kendra.query( QueryText = query, IndexId = index, Facets = [ { "DocumentAttributeKey" : "City", "Facets": [ { "DocumentAttributeKey" : "CityRegion" } ] } ] )

ドキュメント数などのファセット情報は、FacetResults レスポンスの配列で返されます。コンテンツを使用して、アプリケーションでファセット検索提案を表示します。例えば、ドキュメント属性「City」に検索を適用できる都市が含まれている場合、その情報を使用して都市検索のリストを表示します。ユーザーは、都市を選択して検索結果をフィルタリングできます。ファセット検索を行うには、クエリ API を呼び出し、選択したドキュメント属性を使用して結果をフィルタリングします。

1 つのクエリでは、ファセットごとに最大 10 個のファセット値を表示でき、ファセット内には 1 つのネストされたファセットのみを表示できます。これらの制限を引き上げる場合は、サポートにお問い合わせください。ファセットあたりのファセット値の数を 10 未満に制限する場合は、これを Facet オブジェクト内で指定できます。

次の JSON レスポンスのサンプルは、対象範囲が「City」というドキュメント属性であるファセットを示しています。レスポンスには、ファセット値のドキュメント数が含まれます。

{ 'FacetResults': [ { 'DocumentAttributeKey': 'City', 'DocumentAttributeValueCountPairs': [ { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Dubai' } }, { 'Count': 3, 'DocumentAttributeValue': { 'StringValue': 'Seattle' } }, { 'Count': 1, 'DocumentAttributeValue': { 'StringValue': 'Paris' } } ] } ]

また、都市内の地域などのネストされたファセットのファセット情報を表示して、検索結果をさらに絞り込むことができます。

次の JSON レスポンスのサンプルは、「City」内のネストされたファセットとして、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」という値を持つ 2 つの項目を含む文字列リストフィールドがある場合、3 つのファセットを持つ FacetResults を取得します。

詳細については、「クエリレスポンスとレスポンスタイプ」を参照してください。

ドキュメント属性を使用した検索結果のフィルタリング

デフォルトでは、Query はすべての検索結果を返します。レスポンスをフィルタリングするには、ドキュメント属性に対して論理演算を実行できます。例えば、特定の都市のドキュメントのみが必要な場合は、「City」および「State」のカスタムドキュメント属性でフィルタリングできます。AttributeFilter を使用して、指定したフィルターに対してブール演算を作成します。

ほとんどの属性は、すべての [response types] (レスポンスタイプ) のレスポンスをフィルタリングできます。ただし、レスポンスをフィルタリングする場合、_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"}}} ] } )

次の例では、FileformatAuthor、または 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"] }} } )

検索結果内の各ドキュメント属性のフィルタリング

Amazon Kendra は、検索結果内の各ドキュメントのドキュメント属性を返します。検索結果の一部として、レスポンスに含める特定のドキュメント属性をフィルタリングできます。デフォルトでは、ドキュメントに割り当てられたすべてのドキュメント属性がレスポンスに返されます。

次の例では、_source_uri および _author ドキュメント属性は、ドキュメントのレスポンスに含まれます。

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