Cómo buscar objetos de datos

El propósito de la API de Search es encontrar objetos de datos que sean similares a una consulta determinada y devolver una lista de resultados clasificados (según la similitud). La API de Search también admite el filtrado.

La API de Search ofrece varias formas de buscar objetos de datos: búsqueda de vectores, búsqueda en el texto completo y búsqueda semántica. Además, se pueden combinar varias búsquedas de cualquier tipo para lograr una búsqueda híbrida.

La búsqueda de vectores te permite proporcionar tu propio vector de búsqueda. Este es el método obligatorio para buscar campos de embedding que no tienen un embedding-config. Si se proporcionan varios campos vector_search, los resultados se combinan con pesos iguales.

En el siguiente ejemplo, se muestra cómo realizar una búsqueda de vectores en una colección con el ID COLLECTION_ID.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • COLLECTION_ID: ID de la colección.
  • LOCATION: Es la región en la que usas Agent Platform.
  • PROJECT_ID: Es el Cloud de Confiance by S3NS ID del proyecto.

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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": "*"
    }
  }
}

Para enviar tu solicitud, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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

Antes de usar cualquiera de los datos de comando a continuación, haz los siguientes reemplazos:

  • SEARCH_VECTOR_FILE: Es la ruta de acceso local a un archivo JSON que contiene el vector denso o disperso con el que se realizará la búsqueda.

    Ejemplo de contenido de archivo para un vector denso:

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

    Ejemplo de contenido de archivo para un vector disperso:

    {
      "sparse": {
        "indices": [1, 5, 10],
        "values": [0.1, 0.5, 0.21]
      }
    }
  • COLLECTION_ID: ID de la colección.
  • LOCATION: Es la región en la que usas Agent Platform.
  • PROJECT_ID: Es el Cloud de Confiance by S3NS ID del proyecto.

Ejecuta el siguiente comando:

Linux, macOS o 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

Deberías recibir una respuesta similar a la que figura a continuación:

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

Ajuste de la precisión y el rendimiento de la búsqueda

En el caso de las búsquedas de vectores en índices de ANN densos con más de 100,000 embeddings, la recuperación basada en agentes, de forma predeterminada, intenta proporcionar una compensación óptima entre la recuperación y la latencia. Puedes ajustar este equilibrio para tu caso de uso especificando una tasa de recuperación objetivo.

Los valores deben ser mayores o iguales que 0.00 y menores o iguales que 1.00.

Para obtener información sobre cómo crear un índice de ANN, consulta Cómo crear un índice de ANN.

En el siguiente ejemplo, se muestra cómo realizar una búsqueda vectorial en un índice de ANN denso con una tasa de recuperación objetivo de 0.95.

REST

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "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

Guarda el vector de búsqueda en un archivo JSON, por ejemplo, vector.json:

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

Luego, ejecuta el siguiente comando 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)

Esto realiza una búsqueda en el texto completo sin vectores dispersos. El dialecto de consulta predeterminado "palabra" trata toda la entrada como términos de búsqueda individuales con un operador AND implícito. Puedes establecer enhanced_query en true para expandir los términos de búsqueda, controlar la lematización, quitar las palabras irrelevantes y permitir operadores de búsqueda adicionales:

  • OR: Es un operador de disyunción que distingue mayúsculas de minúsculas y que coincide con los documentos que contienen al menos uno de los términos especificados. Solo se aplica a los dos términos adyacentes.

  • ": (comillas dobles) para la búsqueda de frases

  • -: Es el operador de negación. Excluye los documentos que contienen los términos que preceden al operador.

La API de búsqueda de texto de Agent Retrieval te permite expresar búsquedas de texto a través de consultas estructuradas que contienen una o más subconsultas, lo que te permite hacer lo siguiente:

  • Coincide con campos específicos de objetos de datos.

  • Especifica el tipo de coincidencia que se realizará:

    • Por término, no distingue mayúsculas de minúsculas

    • Exactamente, distingue mayúsculas de minúsculas

  • Incluye mejoras por idioma para hacer coincidir las raíces de los términos, los sinónimos, los errores ortográficos y las palabras irrelevantes (como "un", "una" y "el").

  • Usa los operadores booleanos AND, OR y NOT para combinar subconsultas.

  • Controla el orden de evaluación agrupando las subconsultas.

  • Las contribuciones de la puntuación de mejora influyen en las clasificaciones.

Existen tres tipos de subconsultas:

  • Texto: Proporciona el texto de búsqueda y uno o más campos con los que se debe hacer la coincidencia.

  • Unaria: Aplica una operación NOT en una sola subconsulta.

  • Combinado: Aplica el operador AND o OR para combinar subconsultas y se puede usar para agrupar otras subconsultas combinadas y controlar el orden de evaluación.

En los ejemplos de esta página, se usa la colección que se muestra en la siguiente tabla. Contiene seis objetos de datos y define los siguientes campos en su esquema de datos: las cadenas ID, Title, Description y el array de cadenas Keywords.

ID Título Descripción Palabras clave
1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
2 Lazy Dog Days El perro marrón duerme. doméstico, mascota, casa, canino, tranquilo, perezoso, obediente
3 Zorro vs. perro El zorro rápido supera al perro. silvestre, doméstico, conflicto, caniformia, mamíferos, interacción
4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante
5 Una historia astuta El perro salta alto. Astuto, salta
6 Mis días de verano sin hacer nada Un cuento sobre relajarse durante las vacaciones de verano. verano, relajarse, vacaciones, sol

Subconsultas de texto

Las búsquedas de texto coinciden con uno o más campos de un objeto de datos. Todas las búsquedas estructuradas deben contener al menos una búsqueda de texto.

En el siguiente ejemplo, se define una consulta de texto básica:

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

De forma predeterminada, el texto se divide en términos individuales, y cada término se busca en los campos especificados. En el ejemplo anterior, se buscan los términos "zorro", "vs" y "perro" en el campo Title.

Las búsquedas de texto tienen los siguientes parámetros opcionales:

  • fields: Es un array de campos con los que se realizará la coincidencia. Si no se especifica, el valor predeterminado es que se haga la coincidencia con todos los campos. Los campos coinciden con un operador OR implícito.

  • match_type: Es el tipo de coincidencia que se realizará. El tipo de concordancia puede ser EXACT, que especifica que el campo debe coincidir exactamente con el texto de búsqueda. Si el campo es un array de cadenas, se realiza una coincidencia con cualquier elemento del array.

  • enhancement: Especifica enabled y un languageCode, lo que permite realizar coincidencias con sinónimos, raíces, errores ortográficos y palabras irrelevantes en el idioma especificado para languageCode (por ejemplo, en-US). El valor predeterminado es sin mejora.

  • boost: Opcional Es un multiplicador que se aplica a la puntuación de la búsqueda. El valor predeterminado es 1.0.

Tipo de coincidencia

El parámetro match_type especifica cómo el texto de búsqueda coincide con el valor de un campo.

El valor del parámetro puede ser uno de los siguientes:

  • EXACT: El campo debe coincidir exactamente con el término de búsqueda. Si el campo es un array de cadenas, se realiza una coincidencia con cualquier elemento del array.

En el siguiente ejemplo, se especifica el tipo de coincidencia EXACT:

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

Tipo de coincidencia para arrays de cadenas

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
1.0000 3 Zorro vs. perro El zorro rápido supera al perro. silvestre, doméstico, conflicto, caniformia, mamíferos, interacción

Cuando el campo es un array de cadenas, el texto de búsqueda coincide con cualquier elemento del array.

En el siguiente ejemplo, se muestra cómo buscar el texto exacto wild en el array de cadenas Keywords:

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

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
1.0000 3 Zorro vs. perro El zorro rápido supera al perro. silvestre, doméstico, conflicto, caniformia, mamíferos, interacción
1.0000 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante
1.0000 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador

Mejoras en las búsquedas

Las búsquedas pueden incluir un parámetro queryEnhancement opcional para especificar mejoras específicas del idioma. Esto incluye la coincidencia con sinónimos, raíces (por ejemplo, la raíz "salt" de "saltar"), ortografía incorrecta y palabras irrelevantes (como "un", "una" y "el").

El parámetro es un objeto con las siguientes propiedades:

  • enabled: Es un valor booleano que especifica si se deben habilitar las mejoras.

  • languageCode: Es una cadena que especifica el idioma de las mejoras (por ejemplo, en-US).

En el siguiente ejemplo, se habilitan las mejoras para el idioma en-US:

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

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
0.3419 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
0.3419 5 Una historia astuta El perro salta alto. Astuto, salta

Si no se especificó queryEnhancement o enabled era false, no se realizaría ninguna coincidencia.

Subconsultas combinadas

Las consultas combinadas aplican una operación booleana a dos o más subconsultas. Las operaciones admitidas son AND y OR.

Las búsquedas combinadas tienen las siguientes propiedades:

  • op: Es el operador booleano que se aplicará a las subqueries. El valor puede ser AND o OR.

  • subQueries: Es un array de subconsultas que se combinarán. Pueden ser cualquiera de los tipos de subconsultas admitidos, incluidas otras consultas combinadas. La profundidad máxima de anidación es de 2.

    • boost: Opcional Es un multiplicador que se aplica a la puntuación de la búsqueda. El valor predeterminado es 1.0.

Conjunción (AND)

El operador AND coincide con los objetos de datos que contienen los términos de todas las subconsultas.

En el siguiente ejemplo, se muestra cómo combinar tres búsquedas de texto con el operador 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" ]
          }
        }
      ]
    }
  }
}

En el ejemplo, las coincidencias solo se producen si coinciden las tres subconsultas.

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
5.0587 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante
5.0587 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador

Cuando una subconsulta de texto tiene varios campos para hacer coincidir, se aplica un OR implícito, como se muestra en el siguiente ejemplo:

"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" ]
          }
        }
      ]
    }
  }
}

En el ejemplo anterior:

  • La primera subconsulta coincide con el término Brown que no distingue mayúsculas de minúsculas en el campo Title o Description.

  • La segunda subconsulta coincide con el término quick que no distingue mayúsculas de minúsculas en el campo Description.

  • La tercera subconsulta coincide con los términos que no distinguen mayúsculas de minúsculas forest y predator en cualquiera de los valores del campo de array de cadenas Keywords.

  • Si las tres subconsultas coinciden, se genera una coincidencia en la consulta combinada.

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
6.3176 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
5.0587 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante

Disyunción (OR)

El operador OR coincide con los objetos de datos que contienen los términos de al menos una de las subconsultas.

En el siguiente ejemplo, se muestra cómo combinar tres búsquedas de texto con el operador 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" ]
          }
        }
      ]
    }
  }
}

En el ejemplo, se produce una coincidencia si coincide alguna de las tres subqueries.

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
6.3176 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
5.0587 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante

Agrupación

Las subconsultas combinadas se pueden anidar dentro de otras subconsultas combinadas para controlar el orden de evaluación.

En el siguiente ejemplo, se muestra cómo agrupar subconsultas:

"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" ]
              }
            }
          }
        }
      ]
    }
  }
}

El ejemplo anterior es equivalente al siguiente: (Fox sin distinguir mayúsculas de minúsculas en Title O jumps sin distinguir mayúsculas de minúsculas en Description) Y NO domestic sin distinguir mayúsculas de minúsculas en ninguno de los elementos Keywords.

En la siguiente tabla, se muestran los resultados de la consulta:

Puntuación ID Título Descripción Palabras clave
3.5178 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
2.2589 5 Una historia astuta El perro salta alto. Astuto, salta

Subconsultas unarias

Las subconsultas unarias aplican una operación booleana a una sola subconsulta en una consulta estructurada. El operador NOT es la única operación unaria admitida.

Las búsquedas unarias tienen las siguientes propiedades:

  • op: Es el operador booleano que se aplicará a la subconsulta. El valor puede ser NOT.

  • subQuery: Es la subconsulta a la que se aplicará la operación unaria.

    • boost: Opcional Es un multiplicador que se aplica a la puntuación de la búsqueda. El valor predeterminado es 1.0.

Negación (NOT)

El operador NOT coincide con los objetos de datos que no contienen los términos de la subconsulta.

En el siguiente ejemplo, se muestra cómo usar el operador NOT:

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

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
1.000 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante
1.000 6 Mis días de verano sin hacer nada Un cuento sobre relajarse durante las vacaciones de verano. verano, relajarse, vacaciones, sol

Cuando se aplica a un array de cadenas, el operador NOT coincide con un objeto de datos si el término no se incluye en ninguno de los elementos del array.

En el ejemplo, se produce una coincidencia si el término orange, que no distingue mayúsculas de minúsculas, no se incluye en ningún elemento del array de cadenas Keywords.

"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" ]
              }
            }
          }
        }
      ]
    }
  }
}

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
6.0587 4 Osos pardos Movimientos rápidos en el bosque. salvaje, bosque, úrsido, depredador superior, hibernación, gigante

Boost

Cualquier subconsulta puede tener un parámetro boost para aplicar un multiplicador a la puntuación de la subconsulta. De forma predeterminada, todas las subconsultas tienen un boost de 1.0.

En el siguiente ejemplo, se muestra cómo potenciar una subconsulta:

"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
        }
      ]
    }
  }
}

Los resultados de la consulta se muestran en la siguiente tabla:

Puntuación ID Título Descripción Palabras clave
7.5534 3 Zorro vs. perro El zorro rápido supera al perro. silvestre, doméstico, conflicto, caniformia, mamíferos, interacción
2.5178 1 The Quick Brown Fox Un zorro marrón rápido salta fácilmente sobre el perro perezoso. salvaje, bosque, mamífero, naranja, agilidad, depredador
1.2589 5 Una historia astuta El perro salta alto. Astuto, salta

Esta búsqueda convierte tu consulta de texto en embeddings para encontrar resultados basados en el significado semántico. Usa el embedding-config definido en tu esquema para generar la incorporación de la búsqueda. Si se proporcionan varios campos vector_search, los resultados se combinan con pesos iguales.

Usa batch_search_data_objects para ejecutar varias búsquedas en paralelo (búsqueda de vectores, búsqueda de texto y búsqueda semántica). Los resultados se pueden combinar y clasificar de forma opcional con el clasificador ReciprocalRankFusion, que combina conjuntos de resultados con el algoritmo de fusión por clasificación recíproca (RRF).