

# 针对 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**–所有筛选器都必须匹配（逻辑与）。
+ **OrAnyFilters**–必须至少有一个匹配（逻辑或）。

**按单个属性进行筛选**  
仅筛选到表格资产：

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

**将筛选器和与逻辑结合使用**  
查找在某个时间戳之后更新的表格资产：

```
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}}}
        ]
    }'
```

**将筛选器与或逻辑相结合**  
搜索表格或技能资产：

```
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}}"}
        }
    }'
```

**使用嵌套的与和或筛选器**  
查找带有特定术语表条目的表格或技能资产：

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

仅使用 `FilterClause` 而不使用 `SearchText`，可列出未经过语义排名的资产。

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