2 — Tworzenie i ładowanie indeksu wyszukiwania za pomocą języka Python
Kontynuuj tworzenie witryny internetowej obsługującej wyszukiwanie, wykonując następujące kroki:
- Tworzenie zasobu wyszukiwania
- Tworzenie nowego indeksu
- Importowanie danych za pomocą języka Python przy użyciu przykładowego skryptu i zestawu Azure SDK azure-search-documents.
Tworzenie zasobu usługi Azure AI Search
Utwórz nowy zasób wyszukiwania z poziomu wiersza polecenia przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Pobierasz również klucz zapytania używany do odczytu do indeksu i uzyskujesz wbudowany klucz administracyjny używany do dodawania obiektów.
Na urządzeniu musi być zainstalowany interfejs wiersza polecenia platformy Azure lub program Azure PowerShell . Jeśli nie jesteś administratorem lokalnym na urządzeniu, wybierz program Azure PowerShell i użyj parametru Scope
, aby uruchomić go jako bieżący użytkownik.
Uwaga
To zadanie nie wymaga rozszerzeń programu Visual Studio Code dla interfejsu wiersza polecenia platformy Azure i programu Azure PowerShell. Program Visual Studio Code rozpoznaje narzędzia wiersza polecenia bez rozszerzeń.
W programie Visual Studio Code w obszarze Terminal wybierz pozycję Nowy terminal.
Połączenie na platformę Azure:
az login
Przed utworzeniem nowej usługi wyszukiwania wyświetl listę istniejących usług dla subskrypcji:
az resource list --resource-type Microsoft.Search/searchServices --output table
Jeśli masz usługę, której chcesz użyć, zanotuj nazwę, a następnie przejdź do następnej sekcji.
Utwórz nową usługę wyszukiwania. Użyj następującego polecenia jako szablonu, podstawiając prawidłowe wartości dla grupy zasobów, nazwy usługi, warstwy, regionu, partycji i replik. Poniższa instrukcja używa grupy zasobów "cognitive-search-demo-rg" utworzonej w poprzednim kroku i określa warstwę "bezpłatna". Jeśli Twoja subskrypcja platformy Azure ma już bezpłatną usługę wyszukiwania, określ warstwę rozliczaną, taką jak "podstawowa".
az search service create --name my-cog-search-demo-svc --resource-group cognitive-search-demo-rg --sku free --partition-count 1 --replica-count 1
Pobierz klucz zapytania, który udziela dostępu do odczytu do usługi wyszukiwania. Usługa wyszukiwania jest aprowizowana przy użyciu dwóch kluczy administracyjnych i jednego klucza zapytania. Zastąp prawidłowe nazwy grupy zasobów i usługi wyszukiwania. Skopiuj klucz zapytania do Notatnik, aby można było wkleić go do kodu klienta w późniejszym kroku:
az search query-key list --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Pobierz klucz interfejsu API administratora usługi wyszukiwania. Klucz interfejsu API administratora zapewnia dostęp do zapisu w usłudze wyszukiwania. Skopiuj jeden z kluczy administratora, aby Notatnik, aby można było go użyć w kroku importu zbiorczego, który tworzy i ładuje indeks:
az search admin-key show --resource-group cognitive-search-demo-rg --service-name my-cog-search-demo-svc
Przygotowywanie skryptu importu zbiorczego do wyszukiwania
Skrypt używa zestawu Azure SDK dla usługi Azure AI Search:
W programie Visual Studio Code otwórz
bulk_upload.py
plik w podkatalogu ,search-website-functions-v4/bulk-upload
zastąp następujące zmienne własnymi wartościami, aby uwierzytelnić się przy użyciu zestawu SDK usługi Azure Search:- TWOJA-SEARCH-SERVICE-NAME
- YOUR-SEARCH-SERVICE-ADMIN-API-KEY
import sys import json import requests import pandas as pd from azure.core.credentials import AzureKeyCredential from azure.search.documents import SearchClient from azure.search.documents.indexes import SearchIndexClient from azure.search.documents.indexes.models import SearchIndex from azure.search.documents.indexes.models import ( ComplexField, CorsOptions, SearchIndex, ScoringProfile, SearchFieldDataType, SimpleField, SearchableField, ) # Get the service name (short name) and admin API key from the environment service_name = "YOUR-SEARCH-SERVICE-NAME" key = "YOUR-SEARCH-SERVICE-ADMIN-API-KEY" endpoint = "https://{}.search.windows.net/".format(service_name) # Give your index a name # You can also supply this at runtime in __main__ index_name = "good-books" # Search Index Schema definition index_schema = "./good-books-index.json" # Books catalog books_url = "https://raw.githubusercontent.com/Azure-Samples/azure-search-sample-data/main/good-books/books.csv" batch_size = 1000 # Instantiate a client class CreateClient(object): def __init__(self, endpoint, key, index_name): self.endpoint = endpoint self.index_name = index_name self.key = key self.credentials = AzureKeyCredential(key) # Create a SearchClient # Use this to upload docs to the Index def create_search_client(self): return SearchClient( endpoint=self.endpoint, index_name=self.index_name, credential=self.credentials, ) # Create a SearchIndexClient # This is used to create, manage, and delete an index def create_admin_client(self): return SearchIndexClient(endpoint=endpoint, credential=self.credentials) # Get Schema from File or URL def get_schema_data(schema, url=False): if not url: with open(schema) as json_file: schema_data = json.load(json_file) return schema_data else: data_from_url = requests.get(schema) schema_data = json.loads(data_from_url.content) return schema_data # Create Search Index from the schema # If reading the schema from a URL, set url=True def create_schema_from_json_and_upload(schema, index_name, admin_client, url=False): cors_options = CorsOptions(allowed_origins=["*"], max_age_in_seconds=60) scoring_profiles = [] schema_data = get_schema_data(schema, url) index = SearchIndex( name=index_name, fields=schema_data["fields"], scoring_profiles=scoring_profiles, suggesters=schema_data["suggesters"], cors_options=cors_options, ) try: upload_schema = admin_client.create_index(index) if upload_schema: print(f"Schema uploaded; Index created for {index_name}.") else: exit(0) except: print("Unexpected error:", sys.exc_info()[0]) # Convert CSV data to JSON def convert_csv_to_json(url): df = pd.read_csv(url) convert = df.to_json(orient="records") return json.loads(convert) # Batch your uploads to Azure Search def batch_upload_json_data_to_index(json_file, client): batch_array = [] count = 0 batch_counter = 0 for i in json_file: count += 1 batch_array.append( { "id": str(i["book_id"]), "goodreads_book_id": int(i["goodreads_book_id"]), "best_book_id": int(i["best_book_id"]), "work_id": int(i["work_id"]), "books_count": i["books_count"] if i["books_count"] else 0, "isbn": str(i["isbn"]), "isbn13": str(i["isbn13"]), "authors": i["authors"].split(",") if i["authors"] else None, "original_publication_year": int(i["original_publication_year"]) if i["original_publication_year"] else 0, "original_title": i["original_title"], "title": i["title"], "language_code": i["language_code"], "average_rating": int(i["average_rating"]) if i["average_rating"] else 0, "ratings_count": int(i["ratings_count"]) if i["ratings_count"] else 0, "work_ratings_count": int(i["work_ratings_count"]) if i["work_ratings_count"] else 0, "work_text_reviews_count": i["work_text_reviews_count"] if i["work_text_reviews_count"] else 0, "ratings_1": int(i["ratings_1"]) if i["ratings_1"] else 0, "ratings_2": int(i["ratings_2"]) if i["ratings_2"] else 0, "ratings_3": int(i["ratings_3"]) if i["ratings_3"] else 0, "ratings_4": int(i["ratings_4"]) if i["ratings_4"] else 0, "ratings_5": int(i["ratings_5"]) if i["ratings_5"] else 0, "image_url": i["image_url"], "small_image_url": i["small_image_url"], } ) # In this sample, we limit batches to 1000 records. # When the counter hits a number divisible by 1000, the batch is sent. if count % batch_size == 0: client.upload_documents(documents=batch_array) batch_counter += 1 print(f"Batch sent! - #{batch_counter}") batch_array = [] # This will catch any records left over, when not divisible by 1000 if len(batch_array) > 0: client.upload_documents(documents=batch_array) batch_counter += 1 print(f"Final batch sent! - #{batch_counter}") print("Done!") if __name__ == "__main__": start_client = CreateClient(endpoint, key, index_name) admin_client = start_client.create_admin_client() search_client = start_client.create_search_client() schema = create_schema_from_json_and_upload( index_schema, index_name, admin_client, url=False ) books_data = convert_csv_to_json(books_url) batch_upload = batch_upload_json_data_to_index(books_data, search_client) print("Upload complete")
Otwórz zintegrowany terminal w programie Visual Studio dla podkatalogu katalogu projektu i uruchom następujące polecenie,
search-website-functions-v4/bulk-upload
aby zainstalować zależności.python3 -m pip install -r requirements.txt
Uruchamianie skryptu importu zbiorczego dla wyszukiwania
Kontynuuj korzystanie ze zintegrowanego terminalu w programie Visual Studio dla podkatalogu katalogu projektu ,
search-website-functions-v4/bulk-upload
aby uruchomić następujące polecenie powłoki bash w celu uruchomienia skryptubulk_upload.py
:python3 bulk-upload.py
W miarę uruchamiania kodu w konsoli jest wyświetlany postęp.
Po zakończeniu przekazywania ostatnia instrukcja wydrukowana w konsoli to "Gotowe! Przekazywanie ukończone".
Przejrzyj nowy indeks wyszukiwania
Po zakończeniu przekazywania indeks wyszukiwania jest gotowy do użycia. Przejrzyj nowy indeks w witrynie Azure Portal.
W witrynie Azure Portal znajdź usługę wyszukiwania utworzoną w poprzednim kroku.
Po lewej stronie wybierz pozycję Indeksy, a następnie wybierz indeks good-books.
Domyślnie indeks zostanie otwarty na karcie Eksplorator wyszukiwania. Wybierz pozycję Wyszukaj , aby zwrócić dokumenty z indeksu.
Wycofywanie zmian pliku importu zbiorczego
Użyj następującego polecenia git w zintegrowanym terminalu programu Visual Studio Code w bulk-insert
katalogu, aby wycofać zmiany. Nie są one potrzebne do kontynuowania samouczka i nie należy zapisywać ani wypychać tych wpisów tajnych do repozytorium.
git checkout .
Kopiowanie nazwy zasobu wyszukiwania
Zanotuj nazwę zasobu wyszukiwania. Będzie to konieczne, aby połączyć aplikację funkcji platformy Azure z zasobem wyszukiwania.
Uwaga
Chociaż możesz być kuszony, aby użyć klucza administratora wyszukiwania w funkcji platformy Azure, to nie jest zgodna z zasadą najniższych uprawnień. Funkcja platformy Azure użyje klucza zapytania w celu zachowania zgodności z najniższymi uprawnieniami.
Następne kroki
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla