biblioteka klienta Azure Cognitive Search dla języka Python — wersja 11.4.0
Azure Cognitive Search to rozwiązanie w chmurze typu search-as-a-service, które udostępnia deweloperom interfejsy API i narzędzia umożliwiające dodawanie rozbudowanego środowiska wyszukiwania za pośrednictwem prywatnej, heterogenicznej zawartości w aplikacjach internetowych, mobilnych i dla przedsiębiorstw.
Usługa Azure Cognitive Search jest dobrze odpowiednia dla następujących scenariuszy aplikacji:
- Skonsoliduj różne typy zawartości w jeden indeks z możliwością wyszukiwania. Aby wypełnić indeks, możesz wypchnąć dokumenty JSON zawierające zawartość lub jeśli dane są już na platformie Azure, utwórz indeksator, aby automatycznie ściągać dane.
- Dołącz zestawy umiejętności do indeksatora, aby utworzyć zawartość z możliwością wyszukiwania na podstawie obrazów i dużych dokumentów tekstowych. Zestaw umiejętności wykorzystuje sztuczną inteligencję z usług Cognitive Services na potrzeby wbudowanego rozpoznawania OCR, rozpoznawania jednostek, wyodrębniania kluczowych fraz, wykrywania języka, tłumaczenia tekstu i analizy tonacji. Możesz również dodać umiejętności niestandardowe, aby zintegrować zewnętrzne przetwarzanie zawartości podczas pozyskiwania danych.
- W aplikacji klienckiej wyszukiwania zaimplementuj logikę zapytań i środowiska użytkownika podobne do komercyjnych wyszukiwarek internetowych.
Użyj biblioteki klienta Azure.Search.Documents, aby:
- Przesyłaj zapytania dotyczące prostych i zaawansowanych formularzy zapytań, które obejmują wyszukiwanie rozmyte, wyszukiwanie wieloznaczne, wyrażenia regularne.
- Zaimplementuj zapytania filtrowane na potrzeby nawigacji aspektowej, wyszukiwania geoprzestrzennego lub zawężaj wyniki na podstawie kryteriów filtrowania.
- Tworzenie indeksów wyszukiwania i zarządzanie nimi.
- Przekazywanie i aktualizowanie dokumentów w indeksie wyszukiwania.
- Tworzenie indeksatorów, które ściągają dane z platformy Azure do indeksu i zarządzaj nimi.
- Tworzenie zestawów umiejętności, które dodają wzbogacanie sztucznej inteligencji do pozyskiwania danych i zarządzanie nimi.
- Tworzenie analizatorów i zarządzanie nimi na potrzeby zaawansowanej analizy tekstu lub zawartości wielojęzycznej.
- Zoptymalizuj wyniki za pomocą profilów oceniania, aby uwzględnić logikę biznesową lub świeżość.
Kod | źródłowyPakiet (PyPI) | Pakiet (Conda) | Dokumentacja referencyjna interfejsu | APIDokumentacja | produktuPróbki
Wprowadzenie
Instalowanie pakietu
Zainstaluj bibliotekę klienta Azure Cognitive Search dla języka Python przy użyciu narzędzia pip:
pip install azure-search-documents
Wymagania wstępne
- Do korzystania z tego pakietu wymagany jest język Python w wersji 3.7 lub nowszej.
- Do korzystania z tego pakietu potrzebna jest subskrypcja platformy Azure i usługa Azure Cognitive Search.
Aby utworzyć nową usługę wyszukiwania, możesz użyć Azure Portal, Azure PowerShell lub interfejsu wiersza polecenia platformy Azure.
az search service create --name <mysearch> --resource-group <mysearch-rg> --sku free --location westus
Aby uzyskać więcej informacji o dostępnych opcjach, zobacz wybieranie warstwy cenowej .
Uwierzytelnianie klienta
Aby korzystać z usługa wyszukiwania, należy utworzyć wystąpienie odpowiedniej klasy klienta: SearchClient
do wyszukiwania indeksowanych dokumentów, SearchIndexClient
zarządzania indeksami lub SearchIndexerClient
przeszukiwania źródeł danych i ładowania dokumentów wyszukiwania do indeksu. Aby utworzyć wystąpienie obiektu klienta, potrzebny będzie punkt końcowy i klucz interfejsu API. Więcej informacji na temat obsługiwanych metod uwierzytelniania za pomocą usługa wyszukiwania można znaleźć w dokumentacji.
Uzyskiwanie klucza interfejsu API
Punkt końcowy i klucz interfejsu API można uzyskać z usługa wyszukiwania w witrynie Azure Portal. Zapoznaj się z dokumentacją , aby uzyskać instrukcje dotyczące uzyskiwania klucza interfejsu API.
Alternatywnie możesz użyć następującego polecenia interfejsu wiersza polecenia platformy Azure, aby pobrać klucz interfejsu API z usługa wyszukiwania:
az search admin-key show --service-name <mysearch> --resource-group <mysearch-rg>
Istnieją dwa typy kluczy używanych do uzyskiwania dostępu do usługi wyszukiwania: admin(read-write) i query(tylko do odczytu) klucze. Ograniczenie dostępu i operacji w aplikacjach klienckich jest niezbędne do ochrony zasobów wyszukiwania w usłudze. Zawsze używaj klucza zapytania, a nie klucza administratora dla dowolnego zapytania pochodzącego z aplikacji klienckiej.
Uwaga: powyższy fragment kodu interfejsu wiersza polecenia platformy Azure pobiera klucz administratora, aby ułatwić rozpoczęcie eksplorowania interfejsów API, ale należy go starannie zarządzać.
Tworzenie elementu SearchClient
Aby utworzyć wystąpienie elementu , potrzebny będzie punkt końcowy, klucz interfejsuSearchClient
API i nazwa indeksu:
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))
Tworzenie klienta przy użyciu uwierzytelniania usługi Azure Active Directory
Można również utworzyć SearchClient
uwierzytelnianie usługi , SearchIndexClient
lub SearchIndexerClient
przy użyciu usługi Azure Active Directory (AAD). Użytkownik lub jednostka usługi musi mieć przypisaną rolę "Czytnik danych indeksu wyszukiwania".
Za pomocą ustawienia DefaultAzureCredential można uwierzytelnić usługę przy użyciu tożsamości zarządzanej lub jednostki usługi, uwierzytelnić się jako deweloper pracujący nad aplikacją i nie tylko bez zmiany kodu. Zapoznaj się z dokumentacją, aby uzyskać instrukcje dotyczące nawiązywania połączenia z Azure Cognitive Search przy użyciu kontroli dostępu opartej na rolach platformy Azure (Azure RBAC).
Przed użyciem DefaultAzureCredential
dowolnego typu poświadczeń z witryny Azure.Identity należy najpierw zainstalować pakiet Azure.Identity.
Aby użyć DefaultAzureCredential
identyfikatora klienta i wpisu tajnego, należy ustawić AZURE_TENANT_ID
zmienne środowiskowe , AZURE_CLIENT_ID
i AZURE_CLIENT_SECRET
. Alternatywnie możesz przekazać te wartości również w ClientSecretCredential
usłudze Azure.Identity.
Upewnij się, że używasz odpowiedniej przestrzeni nazw w DefaultAzureCredential
górnej części pliku źródłowego:
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)
Kluczowe pojęcia
Usługa Azure Cognitive Search zawiera co najmniej jeden indeks, który zapewnia trwały magazyn danych z możliwością wyszukiwania w postaci dokumentów JSON. (Jeśli dopiero zaczynasz wyszukiwanie, możesz utworzyć bardzo szorstką analogię między indeksami i tabelami bazy danych). Biblioteka klienta Azure.Search.Documents udostępnia operacje na tych zasobach za pośrednictwem dwóch głównych typów klientów.
SearchClient
pomaga w:- Wyszukiwanie indeksowanych dokumentów przy użyciu zaawansowanych zapytań i zaawansowanego kształtowania danych
- Autouzupełnianie częściowo wpisanych terminów wyszukiwania na podstawie dokumentów w indeksie
- Sugerowanie najbardziej prawdopodobnego dopasowania tekstu w dokumentach jako typów użytkowników
- Dodawanie, aktualizowanie lub usuwanie dokumentów z indeksu
SearchIndexClient
umożliwia:- Tworzenie, usuwanie, aktualizowanie lub konfigurowanie indeksu wyszukiwania
- Deklarowanie niestandardowych map synonimów w celu rozszerzania lub ponownego zapisywania zapytań
SearchServiceClient
Większość funkcji nie jest jeszcze dostępna w bieżącej wersji zapoznawczej
SearchIndexerClient
umożliwia:
Azure Cognitive Search oferuje dwie zaawansowane funkcje: wyszukiwanie semantyczne i wyszukiwanie wektorowe.
Wyszukiwanie semantyczne zwiększa jakość wyników wyszukiwania dla zapytań opartych na tekście. Włączając semantyczne wyszukiwanie w usłudze wyszukiwania, można poprawić istotność wyników wyszukiwania na dwa sposoby:
- Stosuje drugą klasyfikację do początkowego zestawu wyników, promując najbardziej semantycznie istotne wyniki na szczycie.
- Wyodrębnia i zwraca podpisy i odpowiedzi w odpowiedzi, które można wyświetlić na stronie wyszukiwania, aby ulepszyć środowisko wyszukiwania użytkownika.
Aby dowiedzieć się więcej na temat wyszukiwania semantycznego, zapoznaj się z dokumentacją.
Wyszukiwanie wektorowe to technika pobierania informacji, która pozwala przezwyciężyć ograniczenia tradycyjnego wyszukiwania opartego na słowach kluczowych. Zamiast polegać wyłącznie na analizie leksykalnej i dopasowywaniu poszczególnych terminów zapytania, usługa Vector Search wykorzystuje modele uczenia maszynowego do przechwytywania kontekstowego znaczenia słów i fraz. Reprezentuje dokumenty i zapytania jako wektory w przestrzeni o wysokim wymiarach nazywane osadzaniem. Dzięki zrozumieniu intencji zapytania usługa Vector Search może dostarczać bardziej istotne wyniki zgodne z wymaganiami użytkownika, nawet jeśli dokładne terminy nie są obecne w dokumencie. Ponadto wyszukiwanie wektorowe można stosować do różnych typów zawartości, w tym obrazów i filmów wideo, a nie tylko tekstu.
Aby dowiedzieć się, jak indeksować pola wektorów i wykonywać wyszukiwanie wektorów, możesz zapoznać się z przykładem. Ten przykład zawiera szczegółowe wskazówki dotyczące pól wektorów indeksowania i pokazuje, jak wykonywać wyszukiwanie wektorów.
Ponadto, aby uzyskać bardziej kompleksowe informacje na temat wyszukiwania wektorowego, w tym jej pojęć i użycia, możesz zapoznać się z dokumentacją. Dokumentacja zawiera szczegółowe wyjaśnienia i wskazówki dotyczące korzystania z możliwości wyszukiwania wektorowego w Azure Cognitive Search.
Azure.Search.Documents
Biblioteka klienta (wersja 1) to zupełnie nowa oferta dla deweloperów języka Python, którzy chcą korzystać z technologii wyszukiwania w swoich aplikacjach. Istnieje starsza, w pełni funkcjonalna Microsoft.Azure.Search
biblioteka klienta (wersja 10) z wieloma podobnymi interfejsami API, dlatego należy zachować ostrożność, aby uniknąć nieporozumień podczas eksplorowania zasobów online.
Przykłady
W poniższych przykładach użyto prostego zestawu danych hotelowego, który można zaimportować do własnego indeksu z Azure Portal. To tylko kilka podstaw — zapoznaj się z naszymi przykładami, aby uzyskać znacznie więcej informacji.
- Wykonywanie zapytania
- Tworzenie indeksu
- Dodawanie dokumentów do indeksu
- Pobieranie określonego dokumentu z indeksu
- Asynchroniczne interfejsy API
Wykonywanie zapytania
Zacznijmy od zaimportowania przestrzeni nazw.
import os
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient
Następnie utworzymy element umożliwiający SearchClient
dostęp do naszego indeksu wyszukiwania hoteli.
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)
Wyszukajmy "luksusowy" hotel.
results = client.search(search_text="luxury")
for result in results:
print("{}: {})".format(result["hotelId"], result["hotelName"]))
Tworzenie indeksu
Możesz użyć polecenia SearchIndexClient
, aby utworzyć indeks wyszukiwania. Pola można zdefiniować przy użyciu wygodnych SimpleField
modeli , SearchableField
lub ComplexField
. Indeksy mogą również definiować sugestory, analizatory leksykalne i nie tylko.
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)
Dodawanie dokumentów do indeksu
W jednym żądaniu wsadowym można utworzyć Upload
wiele Merge
dokumentów z indeksu , , MergeOrUpload
i Delete
wielu dokumentów. Istnieje kilka specjalnych reguł dotyczących scalania , które należy znać.
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))
Uwierzytelnianie w chmurze krajowej
Aby przeprowadzić uwierzytelnianie w chmurze krajowej, należy wprowadzić następujące dodatki do konfiguracji klienta:
AuthorityHost
Ustaw wartość w opcjach poświadczeń lub za pomocą zmiennej środowiskowejAZURE_AUTHORITY_HOST
- Ustaw właściwość w
SearchClient
elemecieaudience
,SearchIndexClient
lubSearchIndexerClient
# 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")
Pobieranie określonego dokumentu z indeksu
Oprócz wykonywania zapytań dotyczących dokumentów przy użyciu słów kluczowych i opcjonalnych filtrów można pobrać konkretny dokument z indeksu, jeśli znasz już klucz. Możesz na przykład pobrać klucz z zapytania i wyświetlić więcej informacji na jego temat lub przejść do tego dokumentu.
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"]))
Asynchroniczne interfejsy API
Ta biblioteka zawiera kompletny asynchroniczny interfejs API. Aby go używać, należy najpierw zainstalować transport asynchroniczny, taki jak aiohttp. Aby uzyskać więcej informacji, zobacz dokumentację platformy 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"]))
Rozwiązywanie problemów
Ogólne
Klient Azure Cognitive Search zgłosi wyjątki zdefiniowane w usłudze Azure Core.
Rejestrowanie
Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.
Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z argumentem słowa kluczowego logging_enable
:
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)
logging_enable
Podobnie można włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączone dla klienta:
result = client.search(search_text="spa", logging_enable=True)
Następne kroki
- Przejdź dalej dzięki plikom Azure.Search.Documents i naszym https://github.com/Azure/azure-sdk-for-python/blob/azure-search-documents_11.4.0/sdk/search/azure-search-documents/samples
- Obejrzyj wideo z pokazem lub głębokim omówieniem
- Dowiedz się więcej o usłudze Azure Cognitive Search
Współtworzenie
Zobacz nasze CONTRIBUTING.md wyszukiwania , aby uzyskać szczegółowe informacje na temat kompilowania, testowania i współtworzenia tej biblioteki.
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź cla.microsoft.com.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.
Powiązane projekty
Azure SDK for Python