搜索数据对象

Search API 的用途是查找与给定查询类似的数据对象,并返回按相似度排序的结果列表。Search API 还支持过滤。

Search API 提供多种搜索数据对象的方式:向量搜索、全文搜索和语义搜索。此外,您还可以将任意类型的多次搜索组合在一起,以实现混合搜索。

借助 Vector Search,您可以提供自己的查询向量。这是搜索没有 embedding-config 的嵌入字段的必需方法。如果提供了多个 vector_search 字段,系统会使用相同的权重来合并结果。

以下示例演示了如何对 ID 为 COLLECTION_ID 的集合执行 Vector Search。

REST

在使用任何请求数据之前,请先进行以下替换:

  • COLLECTION_ID:集合的 ID。
  • LOCATION:您在其中使用 Agent Platform 的区域。
  • PROJECT_ID:您的 Google Cloud 项目 ID。

HTTP 方法和网址:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

请求 JSON 正文:

{
  "vector_search": {
    "search_field": "plot_embedding",
    "vector": {
      "values": [
        0.42426406871192845,
        0.565685424949238,
        0.7071067811865475
      ]
    },
    "filter": {
      "genre": {
        "$eq": "Thriller"
      }
    },
    "top_k": 5,
    "output_fields": {
      "data_fields": "*",
      "vector_fields": "*",
      "metadata_fields": "*"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "results": [
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1",
        "createTime": "2026-01-31T20:05:06Z",
        "updateTime": "2026-02-02T13:59:24Z",
        "data": {
          "year": 1991,
          "title": "The Silence of the Lambs",
          "director": "Jonathan Demme",
          "genre": "Thriller"
        },
        "vectors": {
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.697
    },
    {
      "dataObject": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2",
        "createTime": "2026-02-04T14:35:29Z",
        "updateTime": "2026-02-04T14:37:29Z",
        "data": {
          "year": 1995,
          "title": "Se7en",
          "director": "David Fincher",
          "genre": "Thriller"
        },
        "vectors": {
          "genre_embedding": {
            "dense": {
              "values": [
                0.3863801,
                0.73934346,
                0.16189057,
                0.5271367
              ]
            }
          },
          "plot_embedding": {
            "dense": {
              "values": [
                1,
                1,
                1
              ]
            }
          },
          "sparse_embedding": {
            "sparse": {
              "values": [
                1,
                6,
                3,
                2,
                8,
                5,
                2
              ],
              "indices": [
                4065,
                13326,
                17377,
                25918,
                28105,
                32683,
                42998
              ]
            }
          },
          "soundtrack_embedding": {
            "dense": {
              "values": [
                0.5920452,
                0.08301644,
                0.12647335,
                0.619643,
                0.49258286
              ]
            }
          }
        }
      },
      "distance": 1.75
    }
  ]
}

gcloud

在使用下面的命令数据之前,请先进行以下替换:

  • SEARCH_VECTOR_FILE:包含要搜索的密集向量或稀疏向量的 JSON 文件的本地路径。

    密集向量的文件内容示例:

    {
      "dense": {
        "values": [
          0.42426406871192845,
          0.565685424949238,
          0.7071067811865475
        ]
      }
    }

    稀疏向量的文件内容示例:

    {
      "sparse": {
        "indices": [1, 5, 10],
        "values": [0.1, 0.5, 0.21]
      }
    }
  • COLLECTION_ID:集合的 ID。
  • LOCATION:您在其中使用 Agent Platform 的区域。
  • PROJECT_ID:您的 Google Cloud 项目 ID。

执行以下命令:

Linux、macOS 或 Cloud Shell

gcloud vector-search collections data-objects search \
  --vector-search-field="plot_embedding" \
  --vector-from-file=SEARCH_VECTOR_FILE \
  --json-filter='{"genre": {"$eq": "Thriller"}}' \
  --top-k=5 \
  --output-data-fields='*' \
  --output-vector-fields='*' \
  --output-metadata-fields='*' \
  --collection=COLLECTION_ID \
  --location=LOCATION \
  --project=PROJECT_ID

Windows (PowerShell)

gcloud vector-search collections data-objects search `
  --vector-search-field="plot_embedding" `
  --vector-from-file=SEARCH_VECTOR_FILE `
  --json-filter='{"genre": {"$eq": "Thriller"}}' `
  --top-k=5 `
  --output-data-fields='*' `
  --output-vector-fields='*' `
  --output-metadata-fields='*' `
  --collection=COLLECTION_ID `
  --location=LOCATION `
  --project=PROJECT_ID

Windows (cmd.exe)

gcloud vector-search collections data-objects search ^
  --vector-search-field="plot_embedding" ^
  --vector-from-file=SEARCH_VECTOR_FILE ^
  --json-filter='{"genre": {"$eq": "Thriller"}}' ^
  --top-k=5 ^
  --output-data-fields='*' ^
  --output-vector-fields='*' ^
  --output-metadata-fields='*' ^
  --collection=COLLECTION_ID ^
  --location=LOCATION ^
  --project=PROJECT_ID

您应该会收到类似如下所示的响应:

---
dataObject:
  createTime: '2026-01-31T20:05:06Z'
  data:
    director: Jonathan Demme
    genre: Thriller
    title: The Silence of the Lambs
    year: 1991
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/1
  updateTime: '2026-02-02T13:59:24Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.697
---
dataObject:
  createTime: '2026-02-04T14:35:29Z'
  data:
    director: David Fincher
    genre: Thriller
    title: Se7en
    year: 1995
  name: projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects/2
  updateTime: '2026-02-04T14:37:29Z'
  vectors:
    genre_embedding:
      dense:
        values:
        - 0.38638
        - 0.739343
        - 0.161891
        - 0.527137
    plot_embedding:
      dense:
        values:
        - 1.0
        - 1.0
        - 1.0
    soundtrack_embedding:
      dense:
        values:
        - 0.592045
        - 0.0830164
        - 0.126473
        - 0.619643
        - 0.492583
    sparse_embedding:
      sparse:
        indices:
        - 4065
        - 13326
        - 17377
        - 25918
        - 28105
        - 32683
        - 42998
        values:
        - 1.0
        - 6.0
        - 3.0
        - 2.0
        - 8.0
        - 5.0
        - 2.0
distance: 1.75

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.1, 0.2, 0.3]},
    filter={"genre": {"$eq": "Thriller"}},
    top_k=5,
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent="projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID",
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

调整搜索准确性和性能

对于嵌入数量超过 100,000 的密集 ANN 索引上的 Vector Search,Agent Retrieval 默认会尝试在召回率和延迟时间之间实现最佳平衡。您可以通过指定目标召回率,针对您的用例调整此平衡。

值必须大于或等于 0.00 且小于或等于 1.00。

如需了解如何创建 ANN 索引,请参阅创建 ANN 索引。

以下示例演示了如何对目标召回率为 0.95 的密集 ANN 索引执行 Vector Search。

REST

HTTP 方法和网址:

POST https://vectorsearch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/dataObjects:search

请求 JSON 正文:

{
  "vectorSearch": {
    "searchField": "plot_embedding",
    "vector": {
      "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
    },
    "topK": 10,
    "searchHint": {
      "indexHint": {
        "name": "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID/indexes/INDEX_ID",
        "denseScannParams": {
          "targetRecall": 0.95
        }
      }
    },
    "outputFields": {
      "dataFields": "*",
      "vectorFields": "*",
      "metadataFields": "*"
    }
  }
}

gcloud

将查询向量保存到 JSON 文件(例如 vector.json)中:

{
  "dense": {
    "values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]
  }
}

然后,运行 gcloud vector-search collections data-objects search 命令:

gcloud vector-search collections data-objects search \
    --project=PROJECT_ID \
    --location=LOCATION \
    --collection=COLLECTION_ID \
    --vector-search-field=plot_embedding \
    --vector-from-file=vector.json \
    --use-index=INDEX_ID \
    --dense-scann-target-recall=0.95 \
    --top-k=10

Python

from google.cloud import vectorsearch_v1

# Create the client
data_object_search_service_client = vectorsearch_v1.DataObjectSearchServiceClient()

collection = "projects/PROJECT_ID/locations/LOCATION/collections/COLLECTION_ID"

# Set the target recall rate on the index hint
search_hint = vectorsearch_v1.SearchHint(
    index_hint=vectorsearch_v1.SearchHint.IndexHint(
        name=f"{collection}/indexes/INDEX_ID",
        dense_scann_params=vectorsearch_v1.SearchHint.IndexHint.DenseScannParams(
            target_recall=0.95,
        ),
    ),
)

# Initialize request
vector_search = vectorsearch_v1.VectorSearch(
    search_field="plot_embedding",
    vector={"values": [0.42426406871192845, 0.565685424949238, 0.7071067811865475]},
    top_k=10,
    search_hint=search_hint,
    output_fields=vectorsearch_v1.OutputFields(
        data_fields=["*"],
        vector_fields=["*"],
        metadata_fields=["*"],
    ),
)
request = vectorsearch_v1.SearchDataObjectsRequest(
    parent=collection,
    vector_search=vector_search,
)

# Make the request
response = data_object_search_service_client.search_data_objects(request=request)

# Handle the response
print(response)

此函数可执行不含稀疏向量的全文搜索。默认的“字词”查询方言会将整个输入视为具有隐式 AND 运算符的各个搜索字词。您可以将 enhanced_query 设置为 true,以扩展搜索字词、处理词干提取、移除停用词,并允许使用其他搜索运算符:

  • OR:一种区分大小写的析取运算符,用于匹配包含至少一个指定字词的文档。它仅适用于两个相邻的字词。

  • ":(双引号)用于搜索词组。

  • -:否定运算符。它会排除包含其前面任何字词的文档。

借助 Agent Retrieval 文本搜索 API,您可以通过包含一个或多个子查询的结构化查询来表达文本搜索,从而实现以下目的:

  • 与特定数据对象字段匹配。

  • 指定要执行的匹配类型:

    • 每个字词,不区分大小写

    • 完全匹配,区分大小写

  • 包含针对每种语言的增强功能,以匹配词干、同义词、拼写错误和停用词(例如“a”“an”和“the”)。

  • 使用 AND、OR 和 NOT 布尔运算符组合子查询。

  • 通过将子查询分组在一起来控制评估顺序。

  • 提升得分贡献度,以影响排名。

子查询有三种类型:

  • 文本:提供搜索文本以及一个或多个要匹配的字段。

  • 一元:对单个子查询应用 NOT 运算。

  • 组合:应用 AND 或 OR 运算符来组合子查询,并可用于对其他组合子查询进行分组,以控制评估顺序。

本页面中的示例使用下表所示的集合。它包含六个数据对象,并在其数据架构中定义了以下字段:字符串 ID、Title、Description 和字符串数组 Keywords。

ID 标题 说明 关键字
1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
2 慵懒夏日 棕色的狗在睡觉。 家养, 宠物, 房屋, 犬科动物, 平静, 懒惰, 听话
3 狐狸 vs 狗 聪明的狐狸智胜了狗。 野生, 家养, 冲突, 犬形亚目, 哺乳动物, 互动
4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型
5 狐狸的故事 小狗跳得很高。 狡猾、跳跃
6 我的慵懒夏日 一个关于在暑假期间放松身心的短篇故事。 夏天, 放松, 假期, 太阳

文本子查询

文本查询会与数据对象中的一个或多个字段进行匹配。所有结构化查询都必须至少包含一个文本查询。

以下示例定义了一个基本文本查询:

"text_search": {
  "structured_query": {
    "text": {
      "text": "fox vs dog"
    }
  }
}

默认情况下,文本会被拆分为单个字词,并且系统会在指定字段中搜索每个字词。在前面的示例中,系统会在 Title 字段中搜索字词“fox”“vs”和“dog”。

文本查询具有以下可选参数:

  • fields:要匹配的字段数组。如果未指定,则默认与所有字段进行匹配。字段与隐式 OR 运算符匹配。

  • match_type:要执行的匹配类型。匹配类型可以是 EXACT,用于指定字段必须与搜索文本完全匹配。如果该字段是字符串数组,则会针对数组中的任何元素执行匹配。

  • enhancement:指定 enabled 和 languageCode,以便针对为 languageCode 指定的语言(例如 en-US)中的同义词、词干、拼写错误和停用词进行匹配。默认不进行增强。

  • boost:可选。要应用于查询分数的系数。 默认值为 1.0。

匹配类型

match_type 参数指定搜索文本与字段值的匹配方式。

该参数的值可以是:

  • EXACT:字段必须与查询字词完全匹配。如果该字段是字符串数组,则会针对数组中的任何元素执行匹配。

以下示例指定了 EXACT 匹配类型:

"text_search": {
  "structured_query": {
    "text": {
      "text": "Fox vs Dog",
      "fields": [ "Title" ],
      "match_type": "EXACT"
    }
  }
}

字符串数组的匹配类型

查询结果如下表所示:

得分 ID 标题 说明 关键字
1.0000 3 狐狸 vs 狗 聪明的狐狸智胜了狗。 野生, 家养, 冲突, 犬形亚目, 哺乳动物, 互动

如果字段是字符串数组,则搜索文本会与任何数组元素匹配。

以下示例展示了如何在 Keywords 字符串数组中搜索确切文本 wild:

"text_search": {
  "structured_query": {
    "text": {
      "text": "wild",
      "fields": [ "Keywords" ],
      "match_type": "EXACT"
    }
  }
}

查询结果如下表所示:

得分 ID 标题 说明 关键字
1.0000 3 狐狸 vs 狗 聪明的狐狸智胜了狗。 野生, 家养, 冲突, 犬形亚目, 哺乳动物, 互动
1.0000 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型
1.0000 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者

查询增强功能

搜索查询可以包含可选的 queryEnhancement 参数,以指定特定于语言的增强功能。这包括与同义词、词干(例如,“jump”是“jumping”的词干)、拼写错误和停用词(例如“a”“an”和“the”)进行匹配。

该参数是一个具有以下属性的对象:

  • enabled:一个布尔值,用于指定是否启用增强功能。

  • languageCode:一个字符串,用于指定增强功能的语言(例如 en-US)。

以下示例为 en-US 语言启用了增强功能:

"text_search": {
  "structured_query": {
    "text": {
      "text": {
        "text": "jump",
        "fields": [ "Description" ],
        "queryEnhancement": {
          "enabled": true,
          "languageCode": "en-US"
        }
      }
    }
  }
}

查询结果如下表所示:

得分 ID 标题 说明 关键字
0.3419 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
0.3419 5 狐狸的故事 小狗跳得很高。 狡猾、跳跃

如果未指定 queryEnhancement 或 enabled 为 false,则不会进行匹配。

组合子查询

组合查询会对两个或更多子查询应用布尔运算。支持的操作为 AND 和 OR。

组合查询具有以下属性:

  • op:要应用于子查询的布尔运算符。值可以是 AND 或 OR。

  • subQueries:要组合的子查询数组。这些子查询可以是任何受支持的子查询类型,包括其他组合查询。嵌套深度上限为 2。

    • boost:可选。要应用于查询分数的系数。 默认值为 1.0。

连词 (AND)

AND 运算符会匹配包含所有子查询字词的数据对象。

以下示例演示了如何使用 AND 运算符组合三个文本查询:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

在此示例中,只有当所有三个子查询都匹配时,才会进行匹配。

查询结果如下表所示:

得分 ID 标题 说明 关键字
5.0587 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型
5.0587 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者

当文本子查询有多个要匹配的字段时,系统会应用隐式 OR,如以下示例所示:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

在前面的示例中:

  • 第一个子查询在 Title 或 Description 字段中匹配不区分大小写的字词 Brown。

  • 第二个子查询与 Description 字段中不区分大小写的字词 quick 匹配。

  • 第三个子查询与 Keywords 字符串数组字段中的任何值中的不区分大小写的字词 forest 和 predator 匹配。

  • 如果所有三个子查询都匹配,则组合查询也会匹配。

查询结果如下表所示:

得分 ID 标题 说明 关键字
6.3176 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
5.0587 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型

析取 (OR)

OR 运算符会匹配包含至少一个子查询字词的数据对象。

以下示例演示了如何使用 OR 运算符组合三个文本查询:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title", "Description" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        }
      ]
    }
  }
}

在示例中,如果三个子查询中的任何一个匹配,则会进行匹配。

查询结果如下表所示:

得分 ID 标题 说明 关键字
6.3176 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
5.0587 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型

分组

组合子查询可以嵌套在其他组合子查询中,以控制求值顺序。

以下示例演示了如何对子查询进行分组:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "combine": {
            "op": "OR",
            "subQueries": [
              {
                "text": {
                  "text": "Fox",
                  "fields": [ "Title" ]
                }
              },
              {
                "text": {
                  "text": "jumps",
                  "fields": [ "Description" ]
                }
              }
            ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "domestic",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

上述示例等同于: (Title 中不区分大小写的 Fox OR Description 中不区分大小写的 jumps)AND NOT 任何 Keywords 元素中不区分大小写的 domestic。

下表显示了查询结果:

得分 ID 标题 说明 关键字
3.5178 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
2.2589 5 狐狸的故事 小狗跳得很高。 狡猾、跳跃

一元子查询

一元子查询将布尔运算应用于结构化查询中的单个子查询。NOT 运算符是唯一受支持的一元运算。

一元查询具有以下属性:

  • op:要应用于子查询的布尔运算符。值可以是 NOT。

  • subQuery:要应用一元运算的子查询。

    • boost:可选。要应用于查询分数的系数。 默认值为 1.0。

取反 (NOT)

NOT 运算符会匹配不包含子查询字词的数据对象。

以下示例演示了如何使用 NOT 运算符:

"text_search": {
  "structured_query": {
    "unary": {
      "op": "NOT",
      "subQuery": {
        "text": {
          "text": "dog",
          "fields": [ "Description" ]
        }
      }
    }
  }
}

查询结果如下表所示:

得分 ID 标题 说明 关键字
1.000 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型
1.000 6 我的慵懒夏日 一个关于在暑假期间放松身心的短篇故事。 夏天, 放松, 假期, 太阳

如果应用于字符串数组,则当该字词不包含在数组的任何元素中时,NOT 运算符会匹配数据对象。

在此示例中,如果 Keywords 字符串数组的任何元素中都不包含不区分大小写的字词 orange,则会进行匹配。

"text_search": {
  "structured_query": {
    "combine": {
      "op": "AND",
      "subQueries": [
        {
          "text": {
            "text": "Brown",
            "fields": [ "Title" ]
          }
        },
        {
          "text": {
            "text": "quick",
            "fields": [ "Description" ]
          }
        },
        {
          "text": {
            "text": "forest predator",
            "fields": [ "Keywords" ]
          }
        },
        {
          "unary": {
            "op": "NOT",
            "subQuery": {
              "text": {
                "text": "orange",
                "fields": [ "Keywords" ]
              }
            }
          }
        }
      ]
    }
  }
}

查询结果如下表所示:

得分 ID 标题 说明 关键字
6.0587 4 棕熊 在森林中快速移动。 野生、森林、熊科、顶级掠食者、冬眠、巨型

提高

任何子查询都可以具有 boost 参数,以对子查询的分数应用乘数。默认情况下,所有子查询的 boost 均为 1.0。

以下示例演示了如何提升子查询:

"text_search": {
  "structured_query": {
    "combine": {
      "op": "OR",
      "subQueries": [
        {
          "text": {
            "text": "fox",
            "fields": [ "Title" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "jumps",
            "fields": [ "Description" ]
          },
          "boost": 1.0
        },
        {
          "text": {
            "text": "interaction",
            "fields": [ "Keywords" ]
          },
          "boost": 5.0
        }
      ]
    }
  }
}

查询结果如下表所示:

得分 ID 标题 说明 关键字
7.5534 3 狐狸 vs 狗 聪明的狐狸智胜了狗。 野生, 家养, 冲突, 犬形亚目, 哺乳动物, 互动
2.5178 1 The Quick Brown Fox 一只敏捷的棕色狐狸轻松跃过那只懒狗。 野生, 森林, 哺乳动物, 橙色, 敏捷, 捕食者
1.2589 5 狐狸的故事 小狗跳得很高。 狡猾、跳跃

此搜索功能会将您的文本查询转换为嵌入,以便根据语义含义查找结果。它使用架构中定义的 embedding-config 生成查询嵌入。如果提供了多个 vector_search 字段,系统会使用相同的权重来合并结果。

使用 batch_search_data_objects 并行执行多项搜索(Vector Search、文本搜索和语义搜索)。您可以选择使用 ReciprocalRankFusion 排名器合并结果并对其进行排名,该排名器使用倒数排序融合 (RFF) 算法合并结果集。