Azure Cognitive Search Clientbibliothek für Python– Version 11.4.0
Azure Cognitive Search ist eine Search-as-a-Service-Cloudlösung, die Entwicklern APIs und Tools zum Hinzufügen von umfangreichen Suchfunktionen für private, heterogene Inhalte in Web- und Unternehmensanwendungen sowie in mobilen Anwendungen bietet.
Der Azure Cognitive Search-Dienst eignet sich gut für die folgenden Anwendungsszenarien:
- Konsolidieren Sie verschiedene Inhaltstypen in einem einzelnen durchsuchbaren Index. Um einen Index aufzufüllen, können Sie JSON-Dokumente, die Ihre Inhalte enthalten, per Push übertragen oder wenn sich Ihre Daten bereits in Azure befinden, einen Indexer erstellen, um Daten automatisch zu pullen.
- Fügen Sie Skillsets an einen Indexer an, um durchsuchbare Inhalte aus Bildern und großen Textdokumenten zu erstellen. Ein Skillset nutzt KI von Cognitive Services für integrierte OCR, Entitätserkennung, Schlüsselbegriffserkennung, Spracherkennung, Textübersetzung und Stimmungsanalyse. Sie können auch benutzerdefinierte Skills hinzufügen, um die externe Verarbeitung Ihrer Inhalte während der Datenerfassung zu integrieren.
- Implementieren Sie in einer Suchclientanwendung Abfragelogik und Benutzeroberflächen ähnlich wie bei kommerziellen Websuchmaschinen.
Verwenden Sie die Azure.Search.Documents-Clientbibliothek für Folgendes:
- Übermitteln Sie Abfragen für einfache und erweiterte Abfrageformulare, die Fuzzysuche, Wildcardsuche und reguläre Ausdrücke umfassen.
- Implementieren Sie gefilterte Abfragen für die Facettennavigation, die Geosuche oder die Eingrenzung von Ergebnissen basierend auf Filterkriterien.
- Erstellen und Verwalten von Suchindizes
- Laden Sie Dokumente im Suchindex hoch, und aktualisieren Sie sie.
- Erstellen und verwalten Sie Indexer, die Daten aus Azure in einen Index pullen.
- Erstellen und verwalten Sie Skillsets, die der Datenerfassung KI-Anreicherung hinzufügen.
- Erstellen und verwalten Sie Analysetools für erweiterte Textanalyse oder mehrsprachige Inhalte.
- Optimieren Sie Ergebnisse durch Bewertungsprofile, um Geschäftslogik oder Aktualität zu berücksichtigen.
Quellcode | Paket (PyPI) | Paket (Conda) | API-Referenzdokumentation | Produktdokumentation | Proben
Erste Schritte
Installieren des Pakets
Installieren Sie die Azure Cognitive Search-Clientbibliothek für Python mit pip:
pip install azure-search-documents
Voraussetzungen
- Für die Verwendung dieses Pakets ist Python 3.7 oder höher erforderlich.
- Sie benötigen ein Azure-Abonnement und einen Azure Cognitive Search-Dienst, um dieses Paket verwenden zu können.
Zum Erstellen eines neuen Suchdiensts können Sie die Azure-Portal, Azure PowerShell oder die Azure CLI verwenden.
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Weitere Informationen zu verfügbaren Optionen finden Sie unter Auswählen eines Tarifs .
Authentifizieren des Clients
Für die Interaktion mit dem Suchdienst müssen Sie eine instance der entsprechenden Clientklasse erstellen: SearchClient
zum Durchsuchen indizierte Dokumente, SearchIndexClient
zum Verwalten von Indizes oder SearchIndexerClient
zum Durchforsten von Datenquellen und Laden von Suchdokumenten in einen Index. Zum Instanziieren eines Clientobjekts benötigen Sie einen Endpunkt und einen API-Schlüssel. Weitere Informationen zu unterstützten Authentifizierungsansätzen mit dem Suchdienst finden Sie in der Dokumentation.
Abrufen eines API-Schlüssels
Sie können den Endpunkt und einen API-Schlüssel aus der Suchdienst im Azure-Portal abrufen. Anweisungen zum Abrufen eines API-Schlüssels finden Sie in der Dokumentation .
Alternativ können Sie den folgenden Azure CLI-Befehl verwenden, um den API-Schlüssel aus dem Suchdienst abzurufen:
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Es gibt zwei Arten von Schlüsseln, die für den Zugriff auf Ihren Suchdienst verwendet werden: Administratorschlüssel(Lese-/Schreibzugriff) und Abfrageschlüssel(schreibgeschützt). Das Einschränken des Zugriffs und der Vorgänge in Client-Apps ist besonders wichtig, um die Suchobjekte in Ihrem Dienst zu schützen. Verwenden Sie für Abfragen aus einer Client-App immer einen Abfrageschlüssel anstelle eines Administratorschlüssels.
Hinweis: Der obige Azure CLI-Beispielausschnitt ruft einen Administratorschlüssel ab, sodass sie einfacher mit der Erkundung von APIs beginnen können, aber er sollte sorgfältig verwaltet werden.
Erstellen eines SearchClient
Zum Instanziieren von SearchClient
benötigen Sie den Endpunkt, den API-Schlüssel und den Indexnamen:
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
service_endpoint = os.environ["AZURE_SEARCH_SERVICE_ENDPOINT"]
index_name = os.environ["AZURE_SEARCH_INDEX_NAME"]
key = os.environ["AZURE_SEARCH_API_KEY"]
search_client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))
Erstellen eines Clients mithilfe der Azure Active Directory-Authentifizierung
Sie können auch eine , SearchIndexClient
oder SearchIndexerClient
mithilfe der SearchClient
AAD-Authentifizierung (Azure Active Directory) erstellen. Ihrem Benutzer oder Dienstprinzipal muss die Rolle "Indexdatenleser durchsuchen" zugewiesen sein.
Mit DefaultAzureCredential können Sie einen Dienst mithilfe einer verwalteten Identität oder eines Dienstprinzipals authentifizieren, sich als Entwickler authentifizieren, der an einer Anwendung arbeitet, und vieles mehr, ohne code zu ändern. Anweisungen zum Herstellen einer Verbindung mit Azure Cognitive Search mithilfe der rollenbasierten Zugriffssteuerung in Azure (Azure RBAC) finden Sie in der Dokumentation.
Bevor Sie oder DefaultAzureCredential
einen beliebigen Anmeldeinformationstyp aus Azure.Identity verwenden können, müssen Sie zunächst das Azure.Identity-Paket installieren.
Um mit einer Client-ID und einem Geheimschlüssel zu verwenden DefaultAzureCredential
, müssen Sie die AZURE_TENANT_ID
Umgebungsvariablen , AZURE_CLIENT_ID
und AZURE_CLIENT_SECRET
festlegen. Alternativ können Sie diese Werte auch in Azure.Identity an die ClientSecretCredential
übergeben.
Stellen Sie sicher, dass Sie den richtigen Namespace für DefaultAzureCredential
am Anfang ihrer Quelldatei verwenden:
from azure.identity import DefaultAzureCredential
from azure.search.documents import SearchClient
service_endpoint = os.getenv("AZURE_SEARCH_SERVICE_ENDPOINT")
index_name = os.getenv("AZURE_SEARCH_INDEX_NAME")
credential = DefaultAzureCredential()
search_client = SearchClient(service_endpoint, index_name, credential)
Wichtige Begriffe
Ein Azure Cognitive Search-Dienst enthält einen oder mehrere Indizes, die eine dauerhafte Speicherung durchsuchbarer Daten in Form von JSON-Dokumenten ermöglichen. (Wenn Sie ganz neu in der Suche sind, können Sie eine sehr grobe Analogie zwischen Indizes und Datenbanktabellen herstellen.) Die Azure.Search.Documents-Clientbibliothek macht Vorgänge für diese Ressourcen über zwei Standard Clienttypen verfügbar.
SearchClient
hilft bei:- Durchsuchen Ihrer indizierten Dokumente mithilfe umfangreicher Abfragen und leistungsstarker Datenstrukturierung
- AutoVervollständigen teilweise typisierter Suchbegriffe basierend auf Dokumenten im Index
- Vorschlagen des wahrscheinlichsten übereinstimmenden Texts in Dokumenten als Benutzertyp
- Hinzufügen, Aktualisieren oder Löschen von Dokumenten aus einem Index
SearchIndexClient
ermöglicht Ihnen Folgendes:- Erstellen, Löschen, Aktualisieren oder Konfigurieren eines Suchindexes
- Deklarieren von benutzerdefinierten Synonymzuordnungen zum Erweitern oder Umschreiben von Abfragen
SearchServiceClient
Die meisten Funktionen sind in unserer aktuellen Vorschau noch nicht verfügbar.
SearchIndexerClient
ermöglicht Ihnen Folgendes:
Azure Cognitive Search bietet zwei leistungsstarke Features: Semantische Suche und Vektorsuche.
Die semantische Suche verbessert die Qualität der Suchergebnisse für textbasierte Abfragen. Durch Aktivieren der semantischen Suche in Ihrem Suchdienst können Sie die Relevanz von Suchergebnissen auf zwei Arten verbessern:
- Es wendet die sekundäre Rangfolge auf das anfängliche Resultset an, wodurch die semantisch relevantesten Ergebnisse nach oben heraufgesetzt werden.
- Es extrahiert und gibt Beschriftungen und Antworten in der Antwort zurück, die auf einer Suchseite angezeigt werden können, um die Sucherfahrung des Benutzers zu verbessern.
Weitere Informationen zur semantischen Suche finden Sie in der Dokumentation.
Die Vektorsuche ist eine Technik zum Abrufen von Informationen, die die Einschränkungen der herkömmlichen Schlüsselwort (keyword)-basierten Suche überwindet. Anstatt sich ausschließlich auf lexikalische Analysen und den Abgleich einzelner Abfragebegriffe zu verlassen, verwendet die Vektorsuche Machine Learning-Modelle, um die kontextbezogene Bedeutung von Wörtern und Ausdrücken zu erfassen. Es stellt Dokumente und Abfragen als Vektoren in einem hochdimensionalen Raum dar, der als Einbettung bezeichnet wird. Wenn Sie die Absicht hinter der Abfrage verstehen, kann die Vektorsuche relevantere Ergebnisse liefern, die den Anforderungen des Benutzers entsprechen, auch wenn die genauen Begriffe nicht im Dokument vorhanden sind. Darüber hinaus kann die Vektorsuche auf verschiedene Arten von Inhalten angewendet werden, einschließlich Bildern und Videos, nicht nur auf Text.
Informationen zum Indizieren von Vektorfeldern und zum Ausführen einer Vektorsuche finden Sie im Beispiel. Dieses Beispiel enthält detaillierte Anleitungen zur Indizierung von Vektorfeldern und veranschaulicht die Durchführung der Vektorsuche.
Darüber hinaus finden Sie ausführlichere Informationen zur Vektorsuche, einschließlich der Konzepte und der Verwendung, in der Dokumentation. Die Dokumentation enthält ausführliche Erläuterungen und Anleitungen zur Nutzung der Leistungsfähigkeit der Vektorsuche in Azure Cognitive Search.
Die Azure.Search.Documents
Clientbibliothek (v1) ist ein brandneues Angebot für Python-Entwickler, die Suchtechnologien in ihren Anwendungen verwenden möchten. Es gibt eine ältere, voll ausgestattete Microsoft.Azure.Search
Clientbibliothek (v10) mit vielen ähnlich aussehenden APIs. Achten Sie daher darauf, Verwirrung zu vermeiden, wenn Sie Onlineressourcen erkunden.
Beispiele
In den folgenden Beispielen wird ein einfaches Hotel-Dataset verwendet, das Sie aus dem Azure-Portal in Ihren eigenen Index importieren können. Dies sind nur einige der Grundlagen . Weitere Informationen finden Sie in unseren Beispielen.
- Abfragen
- Erstellen eines Index
- Hinzufügen von Dokumenten zu Ihrem Index
- Abrufen eines bestimmten Dokuments aus Ihrem Index
- Asynchrone APIs
Abfragen
Zunächst importieren wir unsere Namespaces.
import os
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
Wir erstellen dann einen SearchClient
, um auf unseren Suchindex für Hotels zuzugreifen.
index_name = "hotels"
# Get the service endpoint and API key from the environment
endpoint = os.environ["SEARCH_ENDPOINT"]
key = os.environ["SEARCH_API_KEY"]
# Create a client
credential = AzureKeyCredential(key)
client = SearchClient(endpoint=endpoint,
index_name=index_name,
credential=credential)
Suchen wir nach einem "Luxus"-Hotel.
results = client.search(search_text="luxury")
for result in results:
print("{}: {})".format(result["hotelId"], result["hotelName"]))
Erstellen eines Index
Sie können verwenden SearchIndexClient
, um einen Suchindex zu erstellen. Felder können mit praktischen SimpleField
, SearchableField
oder ComplexField
Modellen definiert werden. Indizes können auch Vorschlagser, lexikalische Analysetools und vieles mehr definieren.
client = SearchIndexClient(service_endpoint, AzureKeyCredential(key))
name = "hotels"
fields = [
SimpleField(name="hotelId", type=SearchFieldDataType.String, key=True),
SimpleField(name="baseRate", type=SearchFieldDataType.Double),
SearchableField(name="description", type=SearchFieldDataType.String, collection=True),
ComplexField(
name="address",
fields=[
SimpleField(name="streetAddress", type=SearchFieldDataType.String),
SimpleField(name="city", type=SearchFieldDataType.String),
],
collection=True,
),
]
cors_options = CorsOptions(allowed_origins=["*"], max_age_in_seconds=60)
scoring_profiles: List[ScoringProfile] = []
index = SearchIndex(name=name, fields=fields, scoring_profiles=scoring_profiles, cors_options=cors_options)
result = client.create_index(index)
Hinzufügen von Dokumenten zu Ihrem Index
Sie können Upload
, Merge
, MergeOrUpload
und Delete
mehrere Dokumente aus einem Index in einer einzelnen Batchanforderung ausführen. Es gibt einige besondere Regeln für die Zusammenführung , die sie beachten sollten.
DOCUMENT = {
"category": "Hotel",
"hotelId": "1000",
"rating": 4.0,
"rooms": [],
"hotelName": "Azure Inn",
}
result = search_client.upload_documents(documents=[DOCUMENT])
print("Upload of new document succeeded: {}".format(result[0].succeeded))
Authentifizieren in einer nationalen Cloud
Um sich in einer nationalen Cloud zu authentifizieren, müssen Sie die folgenden Ergänzungen an Ihrer Clientkonfiguration vornehmen:
- Legen Sie in
AuthorityHost
den Anmeldeinformationsoptionen oder über die UmgebungsvariableAZURE_AUTHORITY_HOST
fest. - Legen Sie in
audience
SearchClient
,SearchIndexClient
oder fest.SearchIndexerClient
# Create a SearchClient that will authenticate through AAD in the China national cloud.
import os
from azure.identity import DefaultAzureCredential, AzureAuthorityHosts
from azure.search.documents import SearchClient
index_name = "hotels"
endpoint = os.environ["SEARCH_ENDPOINT"]
key = os.environ["SEARCH_API_KEY"]
credential = DefaultAzureCredential(authority=AzureAuthorityHosts.AZURE_CHINA)
search_client = SearchClient(endpoint, index_name, credential=credential, audience="https://search.azure.cn")
Abrufen eines bestimmten Dokuments aus Ihrem Index
Zusätzlich zum Abfragen von Dokumenten mithilfe von Schlüsselwörtern und optionalen Filtern können Sie ein bestimmtes Dokument aus Ihrem Index abrufen, wenn Sie den Schlüssel bereits kennen. Sie können den Schlüssel z. B. aus einer Abfrage abrufen und weitere Informationen dazu anzeigen oder Ihren Kunden zu diesem Dokument navigieren.
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
search_client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))
result = search_client.get_document(key="23")
print("Details for hotel '23' are:")
print(" Name: {}".format(result["hotelName"]))
print(" Rating: {}".format(result["rating"]))
print(" Category: {}".format(result["category"]))
Asynchrone APIs
Diese Bibliothek enthält eine vollständige asynchrone API. Um es verwenden zu können, müssen Sie zuerst einen asynchronen Transport installieren, z. B. aiohttp. Weitere Informationen finden Sie in der Dokumentation zu azure-core .
from azure.core.credentials import AzureKeyCredential
from azure.search.documents.aio import SearchClient
search_client = SearchClient(service_endpoint, index_name, AzureKeyCredential(key))
async with search_client:
results = await search_client.search(search_text="spa")
print("Hotels containing 'spa' in the name (or other fields):")
async for result in results:
print(" Name: {} (rating {})".format(result["hotelName"], result["rating"]))
Problembehandlung
Allgemein
Der Azure Cognitive Search Client löst ausnahmen aus, die in Azure Core definiert sind.
Protokollierung
Diese Bibliothek verwendet die Standardprotokollbibliothek für die Protokollierung. Grundlegende Informationen zu HTTP-Sitzungen (URLs, Header usw.) werden auf INFO-Ebene protokolliert.
Eine ausführliche Protokollierung auf der Ebene DEBUG, einschließlich Anforderungs-/Antworttexten und vollständiger Header, kann auf einem Client mit dem Schlüsselwortargument logging_enable
aktiviert werden:
import sys
import logging
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
# This client will log detailed information about its HTTP sessions, at DEBUG level
client = SearchClient("<service endpoint>", "<index_name>", AzureKeyCredential("<api key>"), logging_enable=True)
Ebenso kann über logging_enable
die ausführliche Protokollierung für einen einzelnen Vorgang aktiviert werden, auch wenn diese Funktion für den Client nicht aktiviert ist:
result = client.search(search_text="spa", logging_enable=True)
Nächste Schritte
- Gehen Sie mit Azure.Search.Documents und unserem https://github.com/Azure/azure-sdk-for-python/blob/azure-search-documents_11.4.0/sdk/search/azure-search-documents/samples
- Sehen Sie sich eine Demo oder ein ausführliches Video an
- Weitere Informationen zum Azure Cognitive Search-Dienst
Mitwirken
Ausführliche Informationen zum Erstellen, Testen und Mitwirken zu dieser Bibliothek finden Sie in unserem CONTRIBUTING.md Suchen .
Beiträge und Vorschläge für dieses Projekt sind willkommen. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. Weitere Informationen finden Sie unter cla.microsoft.com.
Für dieses Projekt gelten die Microsoft-Verhaltensregeln für Open Source (Microsoft Open Source Code of Conduct). Weitere Informationen finden Sie in den häufig gestellten Fragen zum Verhaltenskodex. Sie können sich auch an opencode@microsoft.com wenden, wenn Sie weitere Fragen oder Anmerkungen haben.
Verwandte Projekte
Azure SDK for Python