Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure AI Search (voorheen bekend als 'Azure Cognitive Search') is een AI-gebaseerd platform voor het ophalen van informatie waarmee ontwikkelaars uitgebreide zoekervaringen en generatieve AI-apps kunnen bouwen die grote taalmodellen combineren met bedrijfsgegevens.
De Azure AI Search-service is geschikt voor de volgende toepassingsscenario's:
- Voeg verschillende inhoudstypen samen in één doorzoekbare index. Als u een index wilt vullen, kunt u JSON-documenten pushen die uw inhoud bevatten, of als uw gegevens zich al in Azure bevindt, een indexeerfunctie maken om automatisch gegevens op te halen.
- Koppel vaardighedensets aan een indexeerfunctie om doorzoekbare inhoud te maken op basis van afbeeldingen en ongestructureerde documenten. Een vaardighedenset maakt gebruik van API's van Azure AI Services voor ingebouwde OCR, entiteitsherkenning, sleuteltermextractie, taaldetectie, tekstomzetting en sentimentanalyse. U kunt ook aangepaste vaardigheden toevoegen om externe verwerking van uw inhoud te integreren tijdens gegevensopname.
- Implementeer in een zoekclienttoepassing querylogica en gebruikerservaringen die vergelijkbaar zijn met commerciële webzoekprogramma's en chat-apps.
Gebruik de @azure/search-documents clientbibliotheek voor het volgende:
- Verzend query's met vector-, trefwoord- en hybride queryformulieren.
- Filterquery's implementeren voor metagegevens, georuimtelijke zoekopdrachten, facetnavigatie of om resultaten te beperken op basis van filtercriteria.
- Zoekindexen maken en beheren.
- Documenten uploaden en bijwerken in de zoekindex.
- Indexeerfuncties maken en beheren die gegevens uit Azure in een index ophalen.
- Vaardighedensets maken en beheren die AI-verrijking toevoegen aan gegevensopname.
- Analyses maken en beheren voor geavanceerde tekstanalyse of meertalige inhoud.
- Optimaliseer de resultaten door middel van semantische classificatie- en scoreprofielen om rekening te houden met bedrijfslogica of nieuwheid.
Sleutelkoppelingen:
- Broncode
- Pakket (NPM)
- API-referentiedocumentatie
- REST API-documentatie
- Productdocumentatie
- Voorbeelden
Slag
Het @azure/search-documents-pakket installeren
npm install @azure/search-documents
Momenteel ondersteunde omgevingen
- LTS-versies van Node.js
- Nieuwste versies van Safari, Chrome, Microsoft Edge en Firefox.
Zie ons ondersteuningsbeleid voor meer informatie.
Voorwaarden
- Een Azure-abonnement
- Een zoekdienst
Als u een nieuwe zoekservice wilt maken, kunt u de Azure Portal, Azure PowerShell of de Azure CLI gebruiken. Hier volgt een voorbeeld van het gebruik van de Azure CLI om een gratis exemplaar te maken om aan de slag te gaan:
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Zie Een prijscategorie kiezen voor meer informatie over de beschikbare opties.
De client verifiëren
Als u met de zoekservice wilt communiceren, moet u een exemplaar van de juiste clientklasse maken: SearchClient voor het doorzoeken van geïndexeerde documenten, SearchIndexClient voor het beheren van indexen of SearchIndexerClient voor het doorzoeken van gegevensbronnen en het laden van zoekdocumenten in een index. Als u een clientobject wilt instantiëren, hebt u een eindpunt en Azure-rollen of een API-sleutel nodig. U kunt de documentatie raadplegen voor meer informatie over ondersteunde verificatiemethoden met de zoekservice.
Een API-sleutel ophalen
Een API-sleutel kan een eenvoudigere benadering zijn om mee te beginnen, omdat hiervoor geen vooraf bestaande roltoewijzingen nodig zijn.
U kunt het eindpunt en een API-sleutel ophalen bij de zoekservice in de Azure Portal. Raadpleeg de documentatie voor instructies over het verkrijgen van een API-sleutel.
U kunt ook de volgende Azure CLI-opdracht gebruiken om de API-sleutel op te halen uit de zoekservice:
az search admin-key show --resource-group <your-resource-group-name> --service-name <your-resource-name>
Er zijn twee soorten sleutels die worden gebruikt om toegang te krijgen tot uw zoekservice: admin-toetsen (lezen-schrijven) en query-toetsen (alleen-lezen). Het beperken van de toegang en bewerkingen in client-apps is essentieel voor het beveiligen van de zoekassets op uw service. Gebruik altijd een querysleutel in plaats van een beheersleutel voor elke query die afkomstig is van een client-app.
Opmerking: In het bovenstaande voorbeeld van een Azure CLI-fragment wordt een beheerderssleutel opgehaald, zodat u gemakkelijker aan de slag kunt gaan met het verkennen van API's, maar deze moet zorgvuldig worden beheerd.
Zodra u een API-sleutel hebt, kunt u deze als volgt gebruiken:
import {
SearchClient,
AzureKeyCredential,
SearchIndexClient,
SearchIndexerClient,
} from "@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>"));
Verifiëren in een nationale cloud
Om u te authenticeren in een nationale cloud, moet u de volgende toevoegingen aan uw clientconfiguratie doen:
- Stel de
AudienceinSearchClientOptions
import {
SearchClient,
AzureKeyCredential,
KnownSearchAudience,
SearchIndexClient,
SearchIndexerClient,
} from "@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,
});
Sleutelbegrippen
Een Azure AI Search-service bevat een of meer indexen die permanente opslag van doorzoekbare gegevens bieden in de vorm van JSON-documenten. (Als u helemaal nieuw bent in het zoeken, kunt u een zeer ruwe analogie maken tussen indexen en databasetabellen.) De @azure/search-documents clientbibliotheek maakt bewerkingen op deze resources beschikbaar via drie hoofdclienttypen.
SearchClientHelpt bij:- Zoeken in uw geïndexeerde documenten met behulp van vectorquery's, trefwoordquery's en hybride query's
- Filters voor vectorquery's en filters voor tekstquery's
- Semantische rangschikking en scoreprofielen voor het vergroten van de relevantie
- Automatisch aanvullen van gedeeltelijk getypte zoektermen op basis van documenten in de index
- De meest waarschijnlijke overeenkomende tekst in documenten voorstellen terwijl een gebruiker typt
- Documenten toevoegen, bijwerken of verwijderen uit een index
SearchIndexClientstelt u in staat om:SearchIndexerClientstelt u in staat om:
Opmerking: Deze clients kunnen niet functioneren in de browser omdat de API's die worden aangeroepen, geen ondersteuning bieden voor Cross-Origin Resource Sharing (CORS).
TypeScript-/JavaScript-specifieke concepten
Documenten
Een item dat is opgeslagen in een zoekindex. De vorm van dit document wordt beschreven in de index met behulp van de fields eigenschap. Elk SearchField heeft een naam, een gegevenstype en aanvullende metagegevens, bijvoorbeeld of het doorzoekbaar of filterbaar is.
Paginering
Meestal wilt u slechts een subset van zoekresultaten tegelijk aan een gebruiker laten zien . Om dit te ondersteunen, kunt u de parameters en topskip gebruiken includeTotalCountom een pagina-ervaring te bieden boven aan de zoekresultaten.
Documentveldcodering
Ondersteunde gegevenstypen in een index worden toegewezen aan JSON-typen in API-aanvragen/-antwoorden. De JS-clientbibliotheek houdt deze meestal hetzelfde, met enkele uitzonderingen:
-
Edm.DateTimeOffsetwordt geconverteerd naar een JSDate. -
Edm.GeographyPointwordt geconverteerd naar eenGeographyPointtype dat door de clientbibliotheek wordt geëxporteerd. - Speciale waarden van het
numbertype (NaN, Infinity, -Infinity) worden geserialiseerd als tekenreeksen in de REST API, maar worden weer geconverteerd naarnumberdoor de clientbibliotheek.
Opmerking: Gegevenstypen worden geconverteerd op basis van waarde, niet op basis van het veldtype in het indexschema. Dit betekent dat als u een ISO8601 datumtekenreeks hebt (bijvoorbeeld '2020-03-06T18:48:27.896Z') als de waarde van een veld, deze wordt geconverteerd naar een datum, ongeacht hoe u deze hebt opgeslagen in uw schema.
Voorbeelden
De volgende voorbeelden demonstreren de basisprincipes - bekijk onze voorbeelden voor nog veel meer.
- Een index maken
- Een specifiek document ophalen uit uw index
- Documenten toevoegen aan uw index
- Een zoekopdracht uitvoeren op documenten
Een index maken
import { SearchIndexClient, AzureKeyCredential } from "@azure/search-documents";
const indexClient = new SearchIndexClient("<endpoint>", new AzureKeyCredential("<apiKey>"));
const result = await indexClient.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(`Index created with name ${result.name}`);
Een specifiek document ophalen uit een index
Een specifiek document kan worden opgehaald met de primaire-sleutelwaarde:
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const result = await searchClient.getDocument("1234");
Documenten toevoegen aan een index
U kunt meerdere documenten uploaden naar index in een batch:
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const uploadResult = await searchClient.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}`);
}
Een zoekopdracht uitvoeren op documenten
Als u alle resultaten van een bepaalde query wilt weergeven, kunt u deze gebruiken search met een zoekreeks die gebruikmaakt van een eenvoudige querysyntaxis:
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const searchResults = await searchClient.search("wifi -luxury");
for await (const result of searchResults.results) {
console.log(result);
}
Voor een meer geavanceerde zoekopdracht die gebruikmaakt van Lucene-syntaxis, geeft u queryType op :full
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const searchResults = await searchClient.search('Category:budget AND "recently renovated"^3', {
queryType: "full",
searchMode: "all",
});
for await (const result of searchResults.results) {
console.log(result);
}
Query's uitvoeren met TypeScript
Neemt in TypeScript SearchClient een algemene parameter die de modelvorm van uw indexdocumenten is. Hiermee kunt u sterk getypte opzoekacties uitvoeren van velden die worden geretourneerd in de resultaten. TypeScript kan ook controleren op velden die worden geretourneerd bij het opgeven van een select parameter.
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>;
parkingIncluded?: boolean | null;
lastRenovationDate?: Date | null;
rating?: number | null;
rooms?: Array<{
beds?: number | null;
description?: string | null;
}>;
}
const searchClient = new SearchClient<Hotel>(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const searchResults = await searchClient.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);
}
Query's uitvoeren met OData-filters
Met behulp van de filter queryparameter kunt u een query uitvoeren op een index met behulp van de syntaxis van een OData-$filter expressie.
import { SearchClient, AzureKeyCredential, odata } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const baseRateMax = 200;
const ratingMin = 4;
const searchResults = await searchClient.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);
}
Query's uitvoeren met vectoren
Tekstinbeddingen kunnen worden opgevraagd met behulp van de vector zoekparameter. Zie Queryvectoren en Vectorquery's filteren voor meer informatie.
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const queryVector: number[] = [
// Embedding of the query "What are the most luxurious hotels?"
];
const searchResults = await searchClient.search("*", {
vectorSearchOptions: {
queries: [
{
kind: "vector",
vector: queryVector,
fields: ["descriptionVector"],
kNearestNeighborsCount: 3,
},
],
},
});
for await (const result of searchResults.results) {
// These results are the nearest neighbors to the query vector
console.log(result);
}
Query's uitvoeren met facetten
Facetten worden gebruikt om een gebruiker van uw toepassing te helpen bij het verfijnen van een zoekopdracht op basis van vooraf geconfigureerde dimensies. Facetsyntaxis biedt de opties voor het sorteren en bucketen van facetwaarden.
import { SearchClient, AzureKeyCredential } from "@azure/search-documents";
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>"),
);
const searchResults = await searchClient.search("WiFi", {
facets: ["category,count:3,sort:count", "rooms/baseRate,interval:100"],
});
console.log(searchResults.facets);
Bij het ophalen van resultaten is er een facets eigenschap beschikbaar die het aantal resultaten aangeeft dat in elke facetbucket valt. Dit kan worden gebruikt om verfijning te stimuleren (bijvoorbeeld het uitvoeren van een vervolgzoekopdracht die filtert op het Rating feit dat het groter is dan of gelijk is aan 3 en kleiner dan 4).
Probleemoplossing
Logboekregistratie
Als u logboekregistratie inschakelt, kunt u nuttige informatie over fouten ontdekken. Als u een logboek met HTTP-aanvragen en -antwoorden wilt zien, stelt u de omgevingsvariabele AZURE_LOG_LEVEL in op info. U kunt logboekregistratie ook tijdens runtime inschakelen door setLogLevel aan te roepen in de @azure/logger:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Voor gedetailleerdere instructies over het inschakelen van logboeken, kunt u de documentatie over het @azure/logger-pakket bekijken.
Volgende stappen
Bijdragen
Als u een bijdrage wilt leveren aan deze bibliotheek, leest u de gids voor bijdragen voor meer informatie over het bouwen en testen van de code.
Dit project verwelkomt bijdragen en suggesties. Voor de meeste bijdragen moet u akkoord gaan met een Licentieovereenkomst voor inzenders (CLA) waarin wordt aangegeven dat u het recht hebt om, en daadwerkelijk, ons de rechten te verlenen om uw bijdrage te gebruiken. Ga voor meer informatie naar cla.microsoft.com.
Dit project onderschrijft de Microsoft Open Source gedragscode. Zie de Veelgestelde vragen over gedragscodes voor meer informatie of neem contact op met opencode@microsoft.com met eventuele aanvullende vragen of opmerkingen.
Verwante projecten
Azure SDK for JavaScript