Klientská knihovna Azure AI Search pro JavaScript – verze 12.1.0
azure AI Search (dříve označované jako Azure Cognitive Search) je platforma pro načítání informací využívající AI, která vývojářům pomáhá vytvářet bohatá vyhledávací prostředí a generovat aplikace AI, které kombinují velké jazykové modely s podnikovými daty.
Služba Azure AI Search je vhodná pro následující scénáře aplikací:
- Sloučit různé typy obsahu do jediného prohledávatelného indexu Pokud chcete naplnit index, můžete odeslat dokumenty JSON, které obsahují váš obsah, nebo pokud už jsou vaše data v Azure, vytvořte indexer, který automaticky načítá data.
- Připojte sady dovedností k indexeru a vytvořte prohledávatelný obsah z obrázků a nestrukturovaných dokumentů. Sada dovedností využívá rozhraní API ze služeb Azure AI pro integrovanou technologii OCR, rozpoznávání entit, extrakci klíčových frází, rozpoznávání jazyka, překlad textu a analýzu mínění. Můžete také přidat vlastní dovednosti pro integraci externího zpracování obsahu během příjmu dat.
- V klientské aplikaci vyhledávací služby implementujte logiku dotazů a uživatelská prostředí podobná komerčním webovým vyhledávacím webům a aplikacím ve stylu chatu.
Pomocí klientské knihovny @azure/search-documents můžete:
- Odešlete dotazy pomocí vektorových, klíčových slov a formulářů hybridních dotazů.
- Implementujte filtrované dotazy pro metadata, geoprostorové vyhledávání, fasetovou navigaci nebo zúžit výsledky na základě kritérií filtru.
- Vytváření a správa indexů vyhledávání
- Nahrajte a aktualizujte dokumenty v indexu vyhledávání.
- Vytvářejte a spravujte indexery, které načítá data z Azure do indexu.
- Vytvářejte a spravujte sady dovedností, které přidávají rozšiřování AI do příjmu dat.
- Vytvářejte a spravujte analyzátory pro pokročilou analýzu textu nebo vícejazyčný obsah.
- Optimalizujte výsledky prostřednictvím sémantických profilů hodnocení a bodování, abyste mohli využívat obchodní logiku nebo aktuálnost.
Klíčové odkazy:
- zdrojového kódu
- balíčku
(NPM) - Referenční dokumentace k rozhraní API
- Dokumentace k rozhraní REST API
- dokumentace k produktu
- ukázky
Začínáme
Instalace balíčku @azure/search-documents
npm install @azure/search-documents
Aktuálně podporovaná prostředí
- LTS verze Node.js
- Nejnovější verze Safari, Chrome, Microsoft Edge a Firefox.
Další podrobnosti najdete v našich zásadách podpory .
Požadavky
- Předplatné Azure
- vyhledávací služby
K vytvoření nové vyhledávací služby můžete použítwebu
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Další informace o dostupných možnostech najdete v výběru cenové úrovně.
Ověření klienta
Pokud chcete pracovat s vyhledávací službou, budete muset vytvořit instanci příslušné třídy klienta: SearchClient
pro vyhledávání indexovaných dokumentů, SearchIndexClient
pro správu indexů nebo SearchIndexerClient
pro procházení zdrojů dat a načítání vyhledávacích dokumentů do indexu. K vytvoření instance objektu klienta budete potřebovat koncový bod
Získání klíče rozhraní API
Klíč rozhraní API může být jednodušším přístupem, protože nevyžaduje předem existující přiřazení rolí.
Koncový bod můžete získat a klíč rozhraní API z vyhledávací služby na webu Azure Portal. Pokyny k získání klíče rozhraní API najdete v dokumentaci.
Případně můžete použít následující příkaz Azure CLI k načtení klíče rozhraní API z vyhledávací služby:
az search admin-key show --resource-group <your-resource-group-name> --service-name <your-resource-name>
Pro přístup ke vyhledávací službě se používají dva typy klíčů: správce(pro čtení i zápis) a dotazu (jen pro čtení) klíče. Omezení přístupu a operací v klientských aplikacích je nezbytné k ochraně vyhledávacích prostředků ve vaší službě. Vždy používejte klíč dotazu místo klíče správce pro jakýkoli dotaz pocházející z klientské aplikace.
Poznámka: Výše uvedený ukázkový fragment kódu Azure CLI načte klíč správce, aby bylo snazší začít zkoumat rozhraní API, ale mělo by se spravovat pečlivě.
Jakmile máte klíč api-key, můžete ho použít následujícím způsobem:
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>"));
Ověřování v národním cloudu
Pokud se chcete ověřit vnárodního cloudu
- Nastavení
Audience
vSearchClientOptions
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,
});
Klíčové koncepty
Služba Azure AI Search obsahuje jeden nebo více indexů, které poskytují trvalé úložiště prohledávatelných dat ve formě dokumentů JSON. (Pokud vyhledávání začínáte, můžete vytvořit velmi přibližnou analogii mezi indexy a databázovými tabulkami.) Klientská knihovna @azure/search-documents zveřejňuje operace s těmito prostředky prostřednictvím tří hlavních typů klientů.
SearchClient
pomáhá s:- vyhledávání indexovaných dokumentů pomocí vektorových dotazů , dotazů klíčových slov a hybridních dotazů
- Filtry vektorových dotazů a filtry textového dotazu
- sémantické hodnocení a profily bodování pro zvýšení relevance
- automatické dokončování částečně zadaných hledaných termínů na základě dokumentů v indexu
- Navrhování nejpravděpodobnější shodný text v dokumentech jako typ uživatele
- přidávání, aktualizace nebo odstraňování dokumentů dokumenty z indexu
SearchIndexClient
umožňuje:SearchIndexerClient
umožňuje:
Poznámka: Tito klienti nemůžou v prohlížeči fungovat, protože rozhraní API, která volá, nemají podporu sdílení prostředků mezi zdroji (CORS).
Koncepty specifické pro TypeScript nebo JavaScript
Dokumenty
Položka uložená v indexu vyhledávání. Tvar tohoto dokumentu je popsán v indexu pomocí vlastnosti fields
. Každý SearchField
má název, datový typ a další metadata, například pokud je prohledávatelná nebo filtrovatelná.
Stránkování
Obvykle budete chtít zobrazit podmnožinu výsledků hledání uživateli najednou. K tomu můžete použít parametry top
, skip
a includeTotalCount
k zajištění stránkovaného prostředí nad výsledky hledání.
Kódování pole dokumentu
podporované datové typy v indexu se mapují na typy JSON v požadavcích a odpovědích rozhraní API. Klientská knihovna JS udržuje tyto převážně stejné, s některými výjimkami:
-
Edm.DateTimeOffset
je převeden na JSDate
. -
Edm.GeographyPoint
se převede na typGeographyPoint
exportovaný klientskou knihovnou. - Speciální hodnoty typu
number
(NaN, Infinity, -Infinity) jsou serializovány jako řetězce v rozhraní REST API, ale jsou převedeny zpět nanumber
klientskou knihovnou.
Poznámka: Datové typy jsou převedeny na základě hodnoty, nikoli na typ pole ve schématu indexu. To znamená, že pokud máte jako hodnotu pole ISO8601 řetězec data (například 2020-03-06T18:48:27.896Z), převede se na datum bez ohledu na to, jak jste ho uložili ve schématu.
Příklady
Následující příklady ukazují základy – si projděte naše ukázky mnohem více.
- Vytvoření indexu
- Načtení konkrétního dokumentu z indexu
- přidání dokumentů do indexu
- hledání dokumentů
Vytvoření indexu
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();
Načtení konkrétního dokumentu z indexu
Konkrétní dokument lze načíst hodnotou primárního klíče:
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();
Přidání dokumentů do indexu
Do indexu v dávce můžete nahrát více dokumentů:
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();
Hledání dokumentů
Pokud chcete zobrazit seznam všech výsledků konkrétního dotazu, můžete použít search
s vyhledávacím řetězcem, který používá jednoduchou syntaxi dotazu:
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();
Pokud chcete pokročilejší vyhledávání, které používá syntaxi Lucene, zadejte queryType
, které se mají 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();
Dotazování pomocí TypeScriptu
V TypeScriptu SearchClient
přebírá obecný parametr, který je tvarem modelu dokumentů indexu. To umožňuje provádět vyhledávání polí vrácených ve výsledcích se silnými typy. TypeScript také dokáže kontrolovat pole vrácená při zadávání parametru select
.
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 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();
Dotazování pomocí filtrů OData
Pomocí parametru dotazu
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();
Dotazování pomocí vektorů
Vkládání textu se dá dotazovat pomocí parametru vector
vyhledávání. Další informace najdete v tématu vektory dotazů a vektorové dotazy filtru.
const { SearchClient, AzureKeyCredential } = require("@azure/search-documents");
const searchClient = new SearchClient(
"<endpoint>",
"<indexName>",
new AzureKeyCredential("<apiKey>")
);
async function main() {
const queryVector = [...];
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);
}
}
main();
Dotazování pomocí omezujících vlastností
facets slouží k tomu, aby uživatel vaší aplikace upřesňuje hledání podle předem nakonfigurovaných dimenzí. syntaxe omezující vlastnosti poskytuje možnosti řazení a rozdělení hodnot omezujících vlastností do kbelíku.
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();
Při načítání výsledků bude k dispozici vlastnost facets
, která bude indikovat počet výsledků, které spadají do každého kontejneru omezující vlastnosti. Dá se použít k upřesnění (např. vydání následného vyhledávání, které filtruje Rating
větší než nebo rovno 3 a menší než 4.)
Řešení problémů
Protokolování
Povolení protokolování může pomoct odhalit užitečné informace o chybách. Pokud chcete zobrazit protokol požadavků a odpovědí HTTP, nastavte proměnnou prostředí AZURE_LOG_LEVEL
na info
. Případně můžete protokolování povolit za běhu voláním setLogLevel
v @azure/logger
:
import { setLogLevel } from "@azure/logger";
setLogLevel("info");
Podrobnější pokyny k povolení protokolů najdete v dokumentaci k @azure/protokolovacímu balíčku.
Další kroky
- Další informace o vyhledávacích dokumentech a našich ukázkách
- Přečtěte si další informace o službě Azure AI Search
Přispívající
Pokud chcete přispívat do této knihovny, přečtěte si průvodce přispívání a přečtěte si další informace o vytváření a testování kódu.
Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje souhlas s licenční smlouvou s přispěvatelem (CLA), která deklaruje, že máte právo a ve skutečnosti nám udělíte práva k používání vašeho příspěvku. Podrobnosti najdete v cla.microsoft.com.
Tento projekt přijal pravidla chování microsoftu open source . Další informace najdete v nejčastějších dotazech k kodexu chování nebo kontaktujte opencode@microsoft.com s dalšími dotazy nebo komentáři.
Související projekty
Azure SDK for JavaScript