Creación de una consulta híbrida en Azure AI Search
La Búsqueda híbrida combina una o varias consultas de palabras clave con una o más consultas vectoriales en una sola solicitud de búsqueda. Las consultas se ejecutan en paralelo. Los resultados se combinan y se reordenan mediante las nuevas puntuaciones de búsqueda mediante la fusión de clasificación recíproca (RRF) para devolver un único conjunto de resultados clasificado.
En la mayoría de los casos, por pruebas de punto de referencia, las consultas híbridas con clasificación semántica devuelven los resultados más relevantes.
Para definir una consulta híbrida, use la API de REST 2023-11-01, 2023-10-01-preview, 2024-03-01-preview, el explorador de búsqueda en Azure Portal o versiones más recientes de los SDK de Azure.
Requisitos previos
Índice de búsqueda que contiene
searchable
campos vectoriales y no vectoriales. Consulte Crear un índice y Agregar campos vectoriales a un índice de búsqueda.(Opcional) si quiere la clasificación semántica, el servicio de búsqueda debe ser de nivel Básico o superior, con la clasificación semántica habilitada.
(Opcional) si desea la conversión de texto a vector de una cadena de consulta (actualmente en versión preliminar), cree y asigne un vectorizador a los campos vectoriales del índice de búsqueda.
Ejecute una consulta híbrida en el Explorador de búsqueda
En el Explorador de búsqueda, asegúrese de que la versión de la API sea 2023-10-01-preview o posterior.
En Ver, seleccione vista JSON.
Reemplace la plantilla de consulta predeterminada por una consulta híbrida, como la que comienza en la línea 539 del ejemplo de inicio rápido del vector. Por motivos de brevedad, el vector se trunca en este artículo.
Una consulta híbrida tiene una consulta de texto especificada en
search
y una consulta vectorial especificada envectorQueries.vector
.La consulta de texto y la consulta vectorial deben ser equivalentes o al menos no entrar en conflicto. Si las consultas fueran diferentes, no se obtendrá la ventaja híbrida.
{ "count": true, "search": "historic hotel walk to restaurants and shopping", "select": "HotelId, HotelName, Category, Tags, Description", "top": 7, "vectorQueries": [ { "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], "k": 7, "fields": "DescriptionVector", "kind": "vector", "exhaustive": true } ] }
Seleccione Search.
Solicitud de consulta híbrida (API de REST)
Una consulta híbrida combina la búsqueda de texto y el vector de búsqueda, en la que el parámetro search
toma una cadena de consulta y vectorQueries.vector
toma la consulta vectorial. El motor de búsqueda ejecuta consultas de texto completo y vectores en paralelo. La unión de todas las coincidencias se evalúa por relevancia mediante la fusión de clasificación recíproca (RRF) y se devuelve un único conjunto de resultados en la respuesta.
Los resultados se devuelven en texto sin formato, incluyendo los vectores de los campos marcados como retrievable
. Dado que los vectores numéricos no son útiles en los resultados de búsqueda, elija otros campos del índice como proxy para la coincidencia de vectores. Por ejemplo, si un índice tiene campos "descriptionVector" y "descriptionText", la consulta puede coincidir con "descriptionVector", pero el resultado de la búsqueda puede mostrar "descriptionText". Use el parámetro select
para especificar solo campos legibles en los resultados.
En el ejemplo siguiente se muestra una configuración de consulta híbrida.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"exhaustive": true,
"k": 10
}],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City",
"top": "10"
}
Puntos clave:
La cadena de consulta vectorial se especifica a través de la propiedad
vectorQueries.vector
. La consulta se ejecuta en el campo "DescriptionVector". Establezcakind
en "vector" para indicar el tipo de consulta. Opcionalmente, establezcaexhaustive
en true para consultar el contenido completo del campo vectorial.La búsqueda de palabras clave se especifica mediante la propiedad
search
. Se ejecuta en paralelo con la consulta vectorial.k
determina cuántas coincidencias de vecino más próximo se devuelven de la consulta vectorial y se proporcionan al clasificador de RRF.top
determina cuántas coincidencias se devuelven en la respuesta en total. En este ejemplo, la respuesta incluye 10 resultados, suponiendo que haya al menos 10 coincidencias en los resultados combinados.
Búsqueda híbrida con filtro
En este ejemplo, se agrega un filtro, que se aplica a los campos no vectoriales filterable
del índice de búsqueda.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 10
}
],
"search": "historic hotel walk to restaurants and shopping",
"vectorFilterMode": "postFilter",
"filter": "ParkingIncluded",
"top": "10"
}
Puntos clave:
Los filtros se aplican al contenido de los campos filtrables. En este ejemplo, el campo ParkingIncluded es un valor booleano y se marca como
filterable
en el esquema de índice.En las consultas híbridas, los filtros se pueden aplicar antes de la ejecución de consultas para reducir la superficie de consulta o después de la ejecución de la consulta para recortar los resultados.
"preFilter"
es el valor predeterminado. Para usarpostFilter
, establezca el modo de procesamiento de filtros como se muestra en este ejemplo.Cuando se posfiltran los resultados de la consulta, el número de resultados podría ser menor que el número superior n.
Búsqueda híbrida semántica
Suponiendo que habilitó la clasificación semántica y la definición de índice incluye una configuración semántica, formule una consulta que incluya el vector de búsqueda y la búsqueda de palabras clave con clasificación semántica sobre el conjunto de resultados combinado. Opcionalmente, agregue subtítulos y respuestas.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 50
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Tags",
"queryType": "semantic",
"semanticConfiguration": "my-semantic-config",
"captions": "extractive",
"answers": "extractive",
"top": "50"
}
Puntos clave:
La clasificación semántica acepta hasta 50 resultados de la respuesta combinada. Establezca "k" y "top" en 50 para la representación por igual de ambas consultas.
Se requieren "queryType" y "semanticConfiguration".
"captions" y "answers" son opcionales. Los valores se extraen del texto textual en los resultados. Solo se devuelve una respuesta si los resultados incluyen contenido que tiene las características de una respuesta a la consulta.
Búsqueda híbrida semántica con filtro
Esta es la última consulta de la colección. Es la misma consulta híbrida semántica que el ejemplo anterior, pero con un filtro.
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
"vectorQueries": [
{
"vector": [
-0.009154141,
0.018708462,
. . .
-0.02178128,
-0.00086512347
],
"fields": "DescriptionVector",
"kind": "vector",
"k": 50
}
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Tags",
"queryType": "semantic",
"semanticConfiguration": "my-semantic-config",
"captions": "extractive",
"answers": "extractive",
"filter": "ParkingIsIncluded'",
"vectorFilterMode": "postFilter",
"top": "50"
}
Puntos clave:
El modo de filtro puede afectar al número de resultados disponibles para el reclasificador semántico. Como procedimiento recomendado, es inteligente proporcionar al clasificador semántico el número máximo de documentos (50). Si los prefiltros o postfiltros son demasiado selectivos, es posible que no esté utilizando correctamente el clasificador semántico al proporcionarle menos de 50 documentos con los que trabajar.
El prefiltro se aplica antes de la ejecución de la consulta. Si el prefiltro redujese el área de búsqueda a 100 documentos, la consulta vectorial se ejecutará en el campo "DescriptionVector" para esos 100 documentos, devolviendo las mejores coincidencias k=50. Esos 50 documentos coincidentes pasan a RRF para obtener resultados combinados y, a continuación, al clasificador semántico.
El postfiltro se aplica después de la ejecución de la consulta. Si k=50 devuelve 50 coincidencias en el lado de la consulta vectorial, el filtro posterior se aplica a las 50 coincidencias, lo que reduce los resultados que cumplen los criterios de filtro y le deja con menos de 50 documentos para pasar al clasificador semántico.
Configuración de una respuesta de consulta
Al configurar la consulta híbrida, piense en la estructura de respuesta. La respuesta es un conjunto de filas planas. Los parámetros de la consulta determinan qué campos están en cada fila y cuántas filas están en la respuesta. El motor de búsqueda clasifica los documentos coincidentes y devuelve los resultados más relevantes.
Campos de una respuesta
Los resultados de la búsqueda se componen de campos retrievable
del índice de búsqueda. Un resultado es:
- Todos los campos
retrievable
(valor predeterminado de la API de REST). - Los campos se muestran explícitamente en un parámetro "select" de la consulta.
Los ejemplos de este artículo usaron una instrucción "select" para especificar campos de texto (no vectoriales) en la respuesta.
Nota:
Los vectores no están diseñados de forma inversa en texto legible para humanos, por lo que evite devolverlos en la respuesta. En su lugar, elija campos no vectoriales que sean representativos del documento de búsqueda. Por ejemplo, si la consulta tuviera como destino un campo "DescriptionVector", devuelva un campo de texto equivalente si tuviera uno ("Description") en la respuesta.
Número de resultados
Una consulta puede coincidir con cualquier número de documentos, tanto como con todos ellos si los criterios de búsqueda son débiles (por ejemplo, "buscar=*" para una consulta null). Dado que rara vez resulta práctico devolver resultados sin enlazar, debería especificar un máximo para la respuesta:
"k": n
resultados para consultas de solo vector"top": n
resultados de consultas híbridas que incluyen un parámetro "search"
Tanto "k" como "top" son opcionales. Sin especificar, el número predeterminado de resultados en una respuesta es 50. Puede establecer "top" y "skip" en paginar por los demás resultados o cambiar el valor predeterminado.
Si usa la clasificación semántica, se recomienda establecer "k" y "top" en al menos 50. El clasificador semántico puede aceptar hasta 50 resultados. Al especificar 50 para cada consulta, se obtiene la misma representación de ambos subsistemas de búsqueda.
Clasificación
Se crean varios conjuntos para consultas híbridas, con o sin reordenación semántica opcional. La clasificación de los resultados se calcula mediante la fusión de clasificación recíproca (RRF).
En esta sección, compare las respuestas entre la búsqueda de vector único y la búsqueda híbrida simple para obtener el resultado superior. Los diferentes algoritmos de clasificación, la métrica de similitud de HNSW y la RRF en este caso, producen puntuaciones que tienen diferentes magnitudes. Este comportamiento es una característica del diseño de la aplicación. Las puntuaciones de RRF pueden parecer bastante bajas, incluso con una coincidencia de similitud alta. Las puntuaciones inferiores son una característica del algoritmo RRF. En una consulta híbrida con RRF, se incluye más de la recíproca de los documentos clasificados en los resultados, dada la puntuación relativamente más pequeña de los documentos clasificados de RRF, en lugar del vector de búsqueda puro.
Vector de búsqueda único: @search.score para resultados ordenados por similitud de coseno (función de distancia de similitud de vector predeterminada).
{
"@search.score": 0.8399121,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Address": {
"City": "Arlington"
}
}
Búsqueda híbrida: @search.score para los resultados híbridos clasificados mediante la fusión de clasificación recíproca.
{
"@search.score": 0.032786883413791656,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Address": {
"City": "Arlington"
}
}
Pasos siguientes
Como siguiente paso, recomendamos revisar el código de demostración para Python, C# o JavaScript.