Biblioteca cliente de Azure AI Search para JavaScript: versión 12.0.0
Azure AI Search (anteriormente conocido como "Azure Cognitive Search") es una plataforma de recuperación de información con tecnología de inteligencia artificial que ayuda a los desarrolladores a crear experiencias de búsqueda enriquecidas y aplicaciones de IA generativas que combinan modelos de lenguaje grandes con datos empresariales.
Azure AI Search es adecuado para los siguientes escenarios de aplicación:
- Consolide diversos tipos de contenido en un único índice en el que se pueden realizar búsquedas. Para rellenar un índice, puede insertar documentos JSON que contengan el contenido o, si los datos ya están en Azure, cree un indexador para extraer datos automáticamente.
- Adjunte conjuntos de aptitudes a un indexador para crear contenido que se pueda buscar a partir de imágenes y documentos de texto grandes. Un conjunto de aptitudes aprovecha las API de los servicios de inteligencia artificial para OCR integrado, reconocimiento de entidades, extracción de frases clave, detección de idioma, traducción de texto y análisis de opiniones. También puede agregar aptitudes personalizadas para integrar el procesamiento externo del contenido durante la ingesta de datos.
- En una aplicación cliente de búsqueda, implemente la lógica de consulta y las experiencias de usuario similares a los motores de búsqueda web comerciales.
Use la @azure/search-documents biblioteca cliente para:
- Envíe consultas mediante formularios de consulta híbrida, palabra clave y vector.
- Implemente consultas filtradas para metadatos, búsqueda geoespacial, navegación por facetas o para restringir los resultados en función de los criterios de filtro.
- Cree y administre índices de búsqueda.
- Cargue y actualice documentos en el índice de búsqueda.
- Cree y administre indizadores que extraen datos de Azure en un índice.
- Cree y administre conjuntos de aptitudes que agregan enriquecimiento con inteligencia artificial a la ingesta de datos.
- Cree y administre analizadores para el análisis de texto avanzado o el contenido multilingüe.
- Optimice los resultados mediante perfiles de puntuación para factorizar la lógica de negocios o la actualización.
Vínculos principales:
- Código fuente
- Paquete (NPM)
- Documentación de referencia de API
- Documentación de la API REST
- Documentación del producto
- Muestras
Introducción
Instalar el paquete @azure/search-documents
npm install @azure/search-documents
Entornos admitidos actualmente
- Versiones de LTS de Node.js
- Versiones más recientes de Safari, Chrome, Edge y Firefox.
Para más información, consulte la directiva de compatibilidad.
Requisitos previos
Para crear un nuevo servicio de búsqueda, puede usar el Azure Portal, Azure PowerShell o la CLI de Azure. Este es un ejemplo de uso de la CLI de Azure para crear una instancia gratuita para empezar:
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Consulte Elección de un plan de tarifa para obtener más información sobre las opciones disponibles.
Autenticar el cliente
Para interactuar con el servicio de búsqueda, deberá crear una instancia de la clase de cliente adecuada: SearchClient
para buscar documentos indexados, SearchIndexClient
para administrar índices o SearchIndexerClient
para rastrear orígenes de datos y cargar documentos de búsqueda en un índice.
Para crear instancias de un objeto de cliente, necesitará un punto de conexión y roles de Azure o una clave de API. Puede consultar la documentación para obtener más información sobre los enfoques de autenticación admitidos con el servicio de búsqueda.
Obtención de una clave de API
Una clave de API puede ser un enfoque más fácil de empezar porque no requiere asignaciones de roles preexistentes.
Puede obtener el punto de conexión y una clave de API desde el servicio de búsqueda en Azure Portal. Consulte la documentación para obtener instrucciones sobre cómo obtener una clave de API.
Como alternativa, puede usar el siguiente comando de la CLI de Azure para recuperar la clave de API del servicio de búsqueda:
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Una vez que tenga una clave de API, puede usarla de la siguiente manera:
const {
SearchClient,
SearchIndexClient,
SearchIndexerClient,
AzureKeyCredential,
} = require("@azure/search-documents");
// To query and manipulate documents
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>")
);
// To manage indexes and synonymmaps
const indexClient = new SearchIndexClient("<endpoint>", new AzureKeyCredential("<apiKey>"));
// To manage indexers, datasources and skillsets
const indexerClient = new SearchIndexerClient("<endpoint>", new AzureKeyCredential("<apiKey>"));
Autenticación en una nube nacional
Para autenticarse en una nube nacional, deberá realizar las siguientes adiciones a la configuración del cliente:
- Establecer en
Audience
SearchClientOptions
const {
SearchClient,
SearchIndexClient,
SearchIndexerClient,
AzureKeyCredential,
KnownSearchAudience,
} = require("@azure/search-documents");
// To query and manipulate documents
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
{
audience: KnownSearchAudience.AzureChina,
}
);
// To manage indexes and synonymmaps
const indexClient = new SearchIndexClient("<endpoint>", new AzureKeyCredential("<apiKey>"), {
audience: KnownSearchAudience.AzureChina,
});
// To manage indexers, datasources and skillsets
const indexerClient = new SearchIndexerClient("<endpoint>", new AzureKeyCredential("<apiKey>"), {
audience: KnownSearchAudience.AzureChina,
});
Conceptos clave
Una servicio Search de Azure AI contiene uno o varios índices que proporcionan almacenamiento persistente de datos que se pueden buscar en forma de documentos JSON. (Si no está familiarizado con la búsqueda, puede hacer una analogía muy aproximada entre índices y tablas de base de datos). La @azure/search-documents biblioteca cliente expone operaciones en estos recursos a través de tres tipos de cliente principales.
SearchClient
ayuda con:- Búsqueda de documentos indexados mediante consultas vectoriales, consultas de palabras clave y consultas híbridas
- Filtros de consulta vectorial y filtros de consulta de texto
- Clasificación semántica y perfiles de puntuación para aumentar la relevancia
- Autocompletar términos de búsqueda parcialmente tipados en función de los documentos del índice
- Sugerir el texto más probable que coincida con los documentos como tipos de usuario
- Agregar, actualizar o eliminar documentos de un índice
SearchIndexClient
permite:SearchIndexerClient
permite:
Nota: Estos clientes no pueden funcionar en el explorador porque las API que llama no admiten el uso compartido de recursos entre orígenes (CORS).
Conceptos específicos de TypeScript/JavaScript
Documentos
Un elemento almacenado dentro de un índice de búsqueda. La forma de este documento se describe en el índice mediante Field
s. Cada campo tiene un nombre, un tipo de datos y metadatos adicionales, como si se puede buscar o filtrar.
Paginación
Normalmente, solo deseará mostrar un subconjunto de resultados de búsqueda a un usuario a la vez. Para admitir esto, puede usar los top
parámetros , skip
y includeTotalCount
para proporcionar una experiencia paginada sobre los resultados de búsqueda.
Codificación de campos de documento
Los tipos de datos admitidos en un índice se asignan a tipos JSON en solicitudes o respuestas de API. La biblioteca cliente de JS mantiene estas principalmente iguales, con algunas excepciones:
Edm.DateTimeOffset
se convierte en un JSDate
.Edm.GeographyPoint
se convierte en unGeographyPoint
tipo exportado por la biblioteca cliente.- Los valores especiales del
number
tipo (NaN, Infinity, -Infinity) se serializan como cadenas en la API REST, pero la biblioteca cliente vuelve a convertir anumber
.
Nota: Los tipos de datos se convierten en función del valor, no el tipo de campo del esquema de índice. Esto significa que si tiene una cadena date de ISO8601 (por ejemplo, "2020-03-06T18:48:27.896Z") como el valor de un campo, se convertirá en una fecha independientemente de cómo lo haya almacenado en el esquema.
Ejemplos
En los ejemplos siguientes se muestran los conceptos básicos: consulte nuestros ejemplos para mucho más.
- Creación de un índice
- Recuperación de un documento específico del índice
- Adición de documentos al índice
- Realizar una búsqueda en documentos
Creación de un índice
const { SearchIndexClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchIndexClient("<endpoint>", new AzureKeyCredential("<apiKey>"));
async function main() {
const result = await client.createIndex({
name: "example-index",
fields: [
{
type: "Edm.String",
name: "id",
key: true,
},
{
type: "Edm.Double",
name: "awesomenessLevel",
sortable: true,
filterable: true,
facetable: true,
},
{
type: "Edm.String",
name: "description",
searchable: true,
},
{
type: "Edm.ComplexType",
name: "details",
fields: [
{
type: "Collection(Edm.String)",
name: "tags",
searchable: true,
},
],
},
{
type: "Edm.Int32",
name: "hiddenWeight",
hidden: true,
},
],
});
console.log(result);
}
main();
Recuperar un documento específico de un índice
Un documento específico se puede recuperar mediante su valor de clave principal:
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const result = await client.getDocument("1234");
console.log(result);
}
main();
Adición de documentos a un índice
Puede cargar varios documentos en el índice dentro de un lote:
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const uploadResult = await client.uploadDocuments([
// JSON objects matching the shape of the client's index
{},
{},
{},
]);
for (const result of uploadResult.results) {
console.log(`Uploaded ${result.key}; succeeded? ${result.succeeded}`);
}
}
main();
Realizar una búsqueda en documentos
Para enumerar todos los resultados de una consulta determinada, puede usar search
con una cadena de búsqueda que use la sintaxis de consulta simple:
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const searchResults = await client.search("wifi -luxury");
for await (const result of searchResults.results) {
console.log(result);
}
}
main();
Para una búsqueda más avanzada que use la sintaxis de Lucene, especifique queryType
que sea full
:
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const searchResults = await client.search('Category:budget AND "recently renovated"^3', {
queryType: "full",
searchMode: "all",
});
for await (const result of searchResults.results) {
console.log(result);
}
}
main();
Consulta con TypeScript
En TypeScript, SearchClient
toma un parámetro genérico que es la forma del modelo de los documentos de índice. Esto le permite realizar búsquedas fuertemente tipadas de campos devueltos en los resultados. TypeScript también puede comprobar los campos devueltos al especificar un select
parámetro.
import { SearchClient, AzureKeyCredential, SelectFields } from "@azure/search-documents";
// An example schema for documents in the index
interface Hotel {
hotelId?: string;
hotelName?: string | null;
description?: string | null;
descriptionVector?: Array<number> | null;
parkingIncluded?: boolean | null;
lastRenovationDate?: Date | null;
rating?: number | null;
rooms?: Array<{
beds?: number | null;
description?: string | null;
} | null>;
}
const client = new SearchClient<Hotel>(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>")
);
async function main() {
const searchResults = await client.search("wifi -luxury", {
// Only fields in Hotel can be added to this array.
// TS will complain if one is misspelled.
select: ["hotelId", "hotelName", "rooms/beds"],
});
// These are other ways to declare the correct type for `select`.
const select = ["hotelId", "hotelName", "rooms/beds"] as const;
// This declaration lets you opt out of narrowing the TypeScript type of your documents,
// though the AI Search service will still only return these fields.
const selectWide: SelectFields<Hotel>[] = ["hotelId", "hotelName", "rooms/beds"];
// This is an invalid declaration. Passing this to `select` will result in a compiler error
// unless you opt out of including the model in the client constructor.
const selectInvalid = ["hotelId", "hotelName", "rooms/beds"];
for await (const result of searchResults.results) {
// result.document has hotelId, hotelName, and rating.
// Trying to access result.document.description would emit a TS error.
console.log(result.document.hotelName);
}
}
main();
Consulta con filtros de OData
El uso del filter
parámetro de consulta permite consultar un índice mediante la sintaxis de una expresión de OData $filter.
const { SearchClient, AzureKeyCredential, odata } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const baseRateMax = 200;
const ratingMin = 4;
const searchResults = await client.search("WiFi", {
filter: odata`Rooms/any(room: room/BaseRate lt ${baseRateMax}) and Rating ge ${ratingMin}`,
orderBy: ["Rating desc"],
select: ["hotelId", "hotelName", "rating"],
});
for await (const result of searchResults.results) {
// Each result will have "HotelId", "HotelName", and "Rating"
// in addition to the standard search result property "score"
console.log(result);
}
}
main();
Consulta con vectores
Las incrustaciones de texto se pueden consultar mediante el vector
parámetro de búsqueda.
const { SearchClient, AzureKeyCredential, odata } = require("@azure/search-documents");
const searchClient = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const queryVector = [...]
const searchResults = await searchClient.search("*", {
vector: {
fields: ["descriptionVector"],
kNearestNeighborsCount: 3,
value: queryVector,
},
});
for await (const result of searchResults.results) {
// These results are the nearest neighbors to the query vector
console.log(result);
}
}
main();
Consulta con facetas
Las facetas se usan para ayudar a un usuario de la aplicación a refinar una búsqueda a lo largo de dimensiones preconfiguradas. La sintaxis de faceta proporciona las opciones para ordenar y ordenar los valores de faceta del cubo.
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const client = new SearchClient("<endpoint>", "<indexName>", new AzureKeyCredential("<apiKey>"));
async function main() {
const searchResults = await client.search("WiFi", {
facets: ["category,count:3,sort:count", "rooms/baseRate,interval:100"],
});
console.log(searchResults.facets);
// Output will look like:
// {
// 'rooms/baseRate': [
// { count: 16, value: 0 },
// { count: 17, value: 100 },
// { count: 17, value: 200 }
// ],
// category: [
// { count: 5, value: 'Budget' },
// { count: 5, value: 'Luxury' },
// { count: 5, value: 'Resort and Spa' }
// ]
// }
}
main();
Al recuperar los resultados, una facets
propiedad estará disponible que indicará el número de resultados que entran en cada cubo de facetas. Esto se puede usar para impulsar el refinamiento (por ejemplo, emitir una búsqueda de seguimiento que filtre por ser Rating
mayor o igual que 3 y menor que 4).
Solución de problemas
Registro
La habilitación del registro puede ayudar a descubrir información útil sobre los errores. Para ver un registro de solicitudes y respuestas HTTP, establezca la variable de entorno AZURE_LOG_LEVEL
en info
. Como alternativa, el registro se puede habilitar en tiempo de ejecución llamando a setLogLevel
en @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Para obtener instrucciones más detalladas sobre cómo habilitar los registros, consulte los documentos del paquete @azure/logger.
Pasos siguientes
- Vaya más allá con los documentos de búsqueda y nuestros ejemplos
- Obtenga más información sobre azure AI servicio Search
Contribuciones
Si desea contribuir a esta biblioteca, lea la guía de contribución para obtener más información sobre cómo compilar y probar el código.
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más información, visite cla.microsoft.com.
Este proyecto ha adoptado el código de conducta de código abierto de Microsoft. Para obtener más información, consulte las preguntas más frecuentes sobre el código de conducta o póngase en contacto con opencode@microsoft.com cualquier pregunta o comentario adicional.
Proyectos relacionados
Azure SDK for JavaScript
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de