

# 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** - 하나 이상 일치해야 합니다(논리 OR).

**단일 속성으로 필터링하려면**  
테이블 자산으로만 필터링합니다.

```
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
```