Klientská knihovna Azure AI Search pro JavaScript – verze 12.0.0
Azure AI Search (dříve označovaná jako "Azure Cognitive Search") je platforma pro načítání informací využívající umělou inteligenci, 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čení různých typů obsahu do jednoho 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řit indexer pro automatické načítání dat.
- Připojte sady dovedností k indexeru a vytvořte prohledávatelný obsah z obrázků a velkých textových dokumentů. Sada dovedností využívá rozhraní API ze služeb AI k integrovanému rozpoznávání OCR, rozpoznávání entit, extrakci klíčových frází, rozpoznávání jazyka, překladu textu a analýze mínění. Můžete také přidat vlastní dovednosti pro integraci externího zpracování obsahu během příjmu dat.
- Ve vyhledávací klientské aplikaci implementujte logiku dotazů a uživatelská prostředí podobná komerčním webovým vyhledávacím webům.
Klientská @azure/search-documents knihovna slouží k:
- Odešlete dotazy pomocí vektorů, klíčových slov a hybridních formulářů dotazů.
- Implementujte filtrované dotazy pro metadata, geoprostorové vyhledávání, fasetovou navigaci nebo zúžení výsledků na základě kritérií filtru.
- Vytváření a správa indexů vyhledávání
- Nahrajte a aktualizujte dokumenty ve vyhledávacím indexu.
- Vytvořte a spravujte indexery, které přetahují data z Azure do indexu.
- Vytvářejte a spravujte sady dovedností, které přidávají rozšíření AI k příjmu dat.
- Vytváření a správa analyzátorů pro pokročilou analýzu textu nebo vícejazyčný obsah
- Optimalizujte výsledky prostřednictvím profilů bodování, abyste mohli zohlednit obchodní logiku nebo aktuálnost.
Klíčové odkazy:
- Zdrojový kód
- Balíček (NPM)
- Referenční dokumentace k rozhraní API
- Dokumentace k rozhraní REST API
- Produktová dokumentace
- ukázky
Začínáme
Nainstalujte balíček @azure/search-documents
.
npm install @azure/search-documents
Aktuálně podporovaná prostředí
- LtS verze Node.js
- Nejnovější verze prohlížečů Safari, Chrome, Edge a Firefox.
Další podrobnosti najdete v našich zásadách podpory .
Požadavky
K vytvoření nové vyhledávací služby můžete použít Azure Portal, Azure PowerShell nebo Azure CLI. Tady je příklad použití Azure CLI k vytvoření bezplatné instance pro začátek:
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Další informace o dostupných možnostech najdete v tématu Volba cenové úrovně .
Ověření klienta
Abyste mohli pracovat s vyhledávací službou, budete muset vytvořit instanci příslušné klientské třídy: SearchClient
pro vyhledávání indexovaných dokumentů, SearchIndexClient
pro správu indexů nebo SearchIndexerClient
pro procházení zdrojů dat a načítání hledaných dokumentů do indexu.
K vytvoření instance objektu klienta budete potřebovat koncový bod a role Azure nebo klíč rozhraní API. Další informace o podporovaných přístupech ověřování pomocí vyhledávací služby najdete v dokumentaci.
Získání klíče rozhraní API
Klíč rozhraní API může být jednodušší způsob, jak začít, protože nevyžaduje přiřazení předem existujících rolí.
Koncový bod a klíč rozhraní API můžete získat 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 k načtení klíče rozhraní API z vyhledávací služby použít následující příkaz Azure CLI :
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Jakmile budete mít 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 v národním cloudu, musíte do konfigurace klienta přidat následující doplňky:
- Nastavení v
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,
});
Klíčové koncepty
Search Azure AI obsahuje jeden nebo více indexů, které poskytují trvalé úložiště prohledávatelných dat ve formě dokumentů JSON. (Pokud s vyhledáváním začínáte, můžete vytvořit velmi přibližnou analogii mezi indexy a databázovými tabulkami.) Klientská @azure/search-documents knihovna zveřejňuje operace s těmito prostředky prostřednictvím tří hlavních typů klientů.
SearchClient
pomáhá s:- Prohledávání indexovaných dokumentů pomocí vektorových dotazů, dotazů na klíčová slova a hybridních dotazů
- Filtry vektorových dotazů a textové filtry dotazů
- Sémantické profily hodnocení a 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šího odpovídajícího textu v dokumentech jako typ uživatele
- Přidání, aktualizace nebo odstranění dokumentů 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á, nepodporují sdílení prostředků mezi zdroji (CORS).
Koncepty specifické pro TypeScript nebo JavaScript
dokumenty.
Položka uložená ve vyhledávacím indexu. Tvar tohoto dokumentu je popsán v indexu pomocí s Field
. Každé pole má název, datový typ a další metadata, například jestli se dá prohledávat nebo filtrovat.
Stránkování
Obvykle budete chtít uživateli zobrazit jenom podmnožinu výsledků hledání najednou. K tomu můžete použít top
parametry a, skip
které includeTotalCount
poskytují stránkované prostředí nad výsledky hledání.
Kódování pole dokumentu
Podporované datové typy v indexu se v požadavcích a odpovědích rozhraní API mapují na typy JSON. V klientské knihovně JS jsou tyto soubory většinou stejné, s některými výjimkami:
Edm.DateTimeOffset
se převede na JSDate
.Edm.GeographyPoint
se převede naGeographyPoint
typ exportovaný klientskou knihovnou.- Speciální hodnoty
number
typu (NaN, Infinity, -Infinity) jsou serializovány jako řetězce v rozhraní REST API, ale jsou převedeny zpět klientskounumber
knihovnou.
Poznámka: Datové typy se převádějí na základě hodnoty, nikoli typu pole ve schématu indexu. To znamená, že pokud máte jako hodnotu pole ISO8601 řetězec data (např. "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 demonstrují základní informace – podívejte se prosím na naše ukázky , kde najdete mnohem více.
- Vytvoření indexu
- Načtení konkrétního dokumentu z indexu
- Přidání dokumentů do indexu
- Vyhledávání v dokumentech
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í určitého dokumentu z indexu
Konkrétní dokument je možné načíst podle hodnoty 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();
Vyhledávání v dokumentech
Pokud chcete zobrazit seznam všech výsledků konkrétního dotazu, můžete použít s search
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();
Pro pokročilejší vyhledávání, které používá syntaxi Lucene, zadejte queryType
hodnotu 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 indexových dokumentů. To umožňuje vyhledávání polí vrácených ve výsledcích se silnými typy. TypeScript také dokáže zkontrolovat 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> | 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();
Dotazování pomocí filtrů OData
Použití parametru filter
dotazu umožňuje dotazovat index pomocí syntaxe výrazu $filter OData.
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 je možné dotazovat pomocí parametru vector
vyhledávání.
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();
Dotazování s omezujícími vlastnostmi
Omezující vlastnosti pomáhají uživateli vaší aplikace upřesnit vyhledávání podle předem nakonfigurovaných dimenzí. Syntaxe fazety poskytuje možnosti řazení a rozdělení hodnot omezující vlastnosti.
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 udávat počet výsledků, které spadají do jednotlivých kontejnerů omezujících vlastností. Můžete ho použít ke zpřesnění (například k následnému hledání, které filtruje Rating
hodnotu větší nebo rovnou 3 a menší než 4).
Poradce při potížích
protokolování
Povolení protokolování může pomoct odhalit užitečné informace o selháních. Pokud chcete zobrazit protokol požadavků a odpovědí HTTP, nastavte proměnnou AZURE_LOG_LEVEL
prostředí na info
. Případně je možné 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 balíčkům @azure/protokolovacího nástroje.
Další kroky
- Další informace o vyhledávacích dokumentech a našich ukázkách
- Přečtěte si další informace o Search Azure AI.
Přispívání
Pokud chcete přispívat do této knihovny, přečtěte si příručku pro přispívání , kde najdete další informace o tom, jak sestavit a otestovat kód.
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á stanoví, že máte právo udělit nám práva k používání vašeho příspěvku a skutečně tak činíte. Podrobnosti najdete v cla.microsoft.com.
Tento projekt přijal pravidla chování pro Open Source společnosti Microsoft. Další informace najdete v nejčastějších dotazech k pravidlům chování nebo kontaktujte s opencode@microsoft.com případnými dalšími dotazy nebo připomínkami.
Související projekty
Azure SDK for JavaScript
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro