

# AWS Glue Data Catalog のセマンティック検索
<a name="catalog-semantic-search"></a>

**注記**  
ビジネスコンテキストとセマンティック検索は AWS Glue のプレビューであり、変更される可能性があります。

セマンティック検索を使用すると、キーワードの完全一致に加えて、意味によってデータアセットを検出できます。結果は、クエリとのセマンティック類似性によってランク付けされます。アセットタイプ、メタデータフィールド、用語集の用語のフィルターを使用して結果を絞り込むことができます。

## SearchAssets API の使用
<a name="catalog-semantic-search-api"></a>

`SearchAssets` API は、`SearchText`、`FilterClause`、またはその両方を受け入れます。どちらも指定しない場合、すべてのアセットが返されます。任意指定のパラメータ: `Sort`、`MaxResults`、`NextToken`。

### テキスト検索
<a name="catalog-semantic-search-text"></a>

```
aws glue search-assets \
    --search-text "customer purchases"
```

出力の例:

```
{
    "Items": [
        {"Id": "c9vq7sh2fk4t2h", "AssetName": "Customer Sales Transactions", "AssetTypeId": "Table"}
    ]
}
```

`--max-results` で結果を制限する:

```
aws glue search-assets \
    --search-text "quarterly revenue" \
    --max-results 5
```

### 検索結果のフィルタリング
<a name="catalog-semantic-search-filters"></a>

`FilterClause` を使用して結果を絞り込みます。サポートされているフィルタのタイプ:
+ **AttributeFilter** – 演算子: `equals`、`greaterThan`、`greaterThanOrEquals`、`lessThan`、`lessThanOrEquals`、`notExists`。
+ **AndAllFilters** – すべてのフィルターが一致している必要があります (論理 AND)。
+ **OrAnyFilters** – 少なくとも 1 つが一致する必要があります (論理 OR)。

**1 つの属性でフィルタリングするには**  
テーブルアセットのみにフィルタリングします:

```
aws glue search-assets \
    --search-text "revenue" \
    --filter-clause '{
        "AttributeFilter": {
            "Attribute": "type",
            "Operator": "equals",
            "Value": {"StringValue": "Table"}
        }
    }'
```

**フィルターを AND ロジックと組み合わせるには**  
タイムスタンプの後に更新されたテーブルアセットを検索します:

```
aws glue search-assets \
    --search-text "customer data" \
    --filter-clause '{
        "AndAllFilters": [
            {"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Table"}}},
            {"AttributeFilter": {"Attribute": "updatedAt", "Operator": "greaterThan", "Value": {"LongValue": 1718400000}}}
        ]
    }'
```

**フィルターを OR ロジックと組み合わせるには**  
テーブルまたはスキルアセットを検索します:

```
aws glue search-assets \
    --search-text "customer data" \
    --filter-clause '{
        "OrAnyFilters": [
            {"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Table"}}},
            {"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Skill"}}}
        ]
    }'
```

**用語集の用語でフィルタリングするには**  
特定の用語集の用語でタグ付けされたアセットに対して (用語 ID で) フィルタリングします:

```
aws glue search-assets \
    --search-text "financial data" \
    --filter-clause '{
        "AttributeFilter": {
            "Attribute": "glossaryTerms",
            "Operator": "equals",
            "Value": {"StringValue": "{{glossary-term-id}}"}
        }
    }'
```

**ネストされた AND フィルターと OR フィルターを使用するには**  
特定の用語集の用語を持つテーブルまたはスキルアセットを検索します:

```
aws glue search-assets \
    --search-text "customer" \
    --filter-clause '{
        "AndAllFilters": [
            {"OrAnyFilters": [
                {"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Table"}}},
                {"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Skill"}}}
            ]},
            {"AttributeFilter": {"Attribute": "glossaryTerms", "Operator": "equals", "Value": {"StringValue": "{{glossary-term-id}}"}}}
        ]
    }'
```

### 検索結果のソート
<a name="catalog-semantic-search-sort"></a>

デフォルトでは、結果はセマンティック関連性でソートされます。属性でソートするには:

```
aws glue search-assets \
    --search-text "customer purchases" \
    --sort '{"Attribute": "assetName", "Order": "ASCENDING"}'
```

```
aws glue search-assets \
    --search-text "customer purchases" \
    --sort '{"Attribute": "updatedAt", "Order": "DESCENDING"}'
```

**注記**  
ソート属性を指定すると、結果はセマンティック関連性ではなく、その属性によって順序付けられます。

### 検索結果のページ分割
<a name="catalog-semantic-search-pagination"></a>

結果が `MaxResults` を超えると、レスポンスには `NextToken` が含まれます。これを使用して、追加のページを取得します。

```
aws glue search-assets \
    --search-text "customer data" \
    --max-results 10 \
    --next-token "eyJsYXN0RXZhbHVhdGVkS2V5Ijp7ImlkIjp7InMiOiJhMWIyYzNkNCJ9fX0="
```

レスポンスに `NextToken` が含まれなくなるまで続行します。

## フィルターのみのクエリの実行
<a name="catalog-semantic-search-filter-only"></a>

セマンティックランキングのないアセットを一覧表示するには、`SearchText` なしで `FilterClause` のみ使用します。

```
aws glue search-assets \
    --filter-clause '{"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Table"}}}' \
    --max-results 20
```

**注記**  
`SearchText` と `FilterClause` の両方を省略すると、API はすべてのアセットを返します。

## 例
<a name="catalog-semantic-search-examples"></a>

**ドメインのスキルアセットを検出するには**  
売上データに関連するスキルアセットを検索します:

```
aws glue search-assets \
    --search-text "sales domain usage rules" \
    --filter-clause '{"AttributeFilter": {"Attribute": "type", "Operator": "equals", "Value": {"StringValue": "Skill"}}}'
```

**注記**  
このクエリは、カスタムスキルアセットのみを返します。マネージドスキルは `SearchAssets` API によって返されません。

**テキスト検索とソートを組み合わせるには**  
一致するアセットの包括的なビューを取得します:

```
aws glue search-assets \
    --search-text "customer" \
    --sort '{"Attribute": "updatedAt", "Order": "DESCENDING"}' \
    --max-results 10
```