Udostępnij za pośrednictwem


Tworzenie indeksu w usłudze Azure AI Search

W tym artykule przedstawiono kroki definiowania schematu indeksu wyszukiwania i wypychania go do usługi wyszukiwania. Tworzenie indeksu ustanawia fizyczne struktury danych w usłudze wyszukiwania. Po utworzeniu indeksu załaduj indeks jako osobne zadanie.

Wymagania wstępne

  • Uprawnienia do zapisu jako współautor usługi wyszukiwania lub klucz interfejsu API administratora na potrzeby uwierzytelniania opartego na kluczach.

  • Znajomość danych, które chcesz indeksować. Indeks wyszukiwania jest oparty na zawartości zewnętrznej, która ma być wyszukiwana. Zawartość z możliwością wyszukiwania jest przechowywana jako pola w indeksie. Musisz mieć jasny pomysł, które pola źródłowe mają być możliwe do wyszukiwania, pobieranie, filtrowanie, tworzenie aspektów i sortowanie (zobacz listę kontrolną schematu, aby uzyskać wskazówki).

  • Musisz również mieć unikatowe pole w danych źródłowych, które może być używane jako klucz dokumentu (lub identyfikator) w indeksie.

  • Stabilna lokalizacja indeksu. Przenoszenie istniejącego indeksu do innej usługi wyszukiwania nie jest obsługiwane w trybie out-of-box. Ponownie zapoznaj się z wymaganiami aplikacji i upewnij się, że istniejąca usługa wyszukiwania (pojemność i lokalizacja) są wystarczające dla Twoich potrzeb.

  • Na koniec wszystkie warstwy usług mają limity indeksów dla liczby obiektów, które można utworzyć. Jeśli na przykład eksperymentujesz z warstwą Bezpłatna, w danym momencie możesz mieć tylko trzy indeksy. W samym indeksie istnieją ograniczenia dotyczące wektorów i limitów indeksów liczby prostych i złożonych pól.

Klucze dokumentów

Indeks wyszukiwania ma dwa wymagania: musi mieć nazwę i klucz dokumentu.

Klucz dokumentu jest unikatowym identyfikatorem dokumentu wyszukiwania, a dokument wyszukiwania jest kolekcją pól, które całkowicie opisują coś. Jeśli na przykład indeksujesz zestaw danych filmów, dokument wyszukiwania zawiera tytuł, gatunek i czas trwania pojedynczego filmu.

W usłudze Azure AI Search klucz dokumentu musi być ciągiem i musi pochodzić z unikatowych wartości w źródle danych, które udostępnia zawartość do indeksowania. Usługa wyszukiwania nie generuje wartości kluczy, ale w niektórych scenariuszach (takich jak indeksator tabel platformy Azure) syntetyzuje istniejące wartości w celu utworzenia unikatowego klucza dla indeksowanych dokumentów.

Podczas indeksowania przyrostowego, gdzie indeksowana jest nowa i zaktualizowana zawartość, dodawane są dokumenty przychodzące z nowymi kluczami, podczas gdy dokumenty przychodzące z istniejącymi kluczami są scalane lub zastępowane, w zależności od tego, czy pola indeksu mają wartość null, czy wypełniane.

Lista kontrolna schematu

Ta lista kontrolna ułatwia podejmowanie decyzji projektowych dotyczących indeksu wyszukiwania.

  1. Przejrzyj konwencje nazewnictwa, aby nazwy indeksów i pól były zgodne z regułami nazewnictwa.

  2. Zobacz obsługiwane typy danych. Typ danych wpływa na sposób użycia pola. Na przykład zawartość liczbowa jest dostępna do filtrowania, ale nie nadaje się do wyszukiwania pełnotekstowego. Najczęściej używanym typem danych jest Edm.String w przypadku tekstu z możliwością wyszukiwania, który jest tokenizowany i odpytywany przy użyciu aparatu do wyszukiwania pełnotekstowego. Najczęstszym typem danych dla pola wektora jest Edm.Single użycie również innych typów.

  3. Identyfikowanie klucza dokumentu. Klucz dokumentu jest wymaganiem dotyczącym indeksu. Jest to jedno pole ciągu, które jest wypełniane z pola danych źródłowych, które zawiera unikatowe wartości. Jeśli na przykład indeksujesz z usługi Blob Storage, ścieżka magazynu metadanych jest często używana jako klucz dokumentu, ponieważ identyfikuje w sposób unikatowy każdy obiekt blob w kontenerze.

  4. Zidentyfikuj pola w źródle danych, które współtworzą zawartość z możliwością wyszukiwania w indeksie.

    Zawartość niewektorowalna do wyszukiwania zawiera krótkie lub długie ciągi, których dotyczy zapytanie przy użyciu wyszukiwarki pełnotekstowej. Jeśli zawartość jest szczegółowa (małe frazy lub większe fragmenty), poeksperymentuj z różnymi analizatorami, aby zobaczyć, jak tekst jest tokenizowany.

    Zawartość wektorowa z możliwością wyszukiwania może być obrazami lub tekstem (w dowolnym języku), które istnieją jako reprezentacja matematyczna. Możesz użyć wąskich typów danych lub kompresji wektorów, aby zmniejszyć pola wektorów.

    Przypisania atrybutów pól określają zarówno zachowania wyszukiwania, jak i fizyczną reprezentację indeksu w usłudze wyszukiwania. Wskazywanie sposobu określania pól jest procesem iteracyjnym dla wielu klientów. Aby przyspieszyć iteracje, zacznij od przykładowych danych, które można łatwo upuszczać i ponownie kompilować.

  5. Określ, które pola źródłowe mogą być używane jako filtry. Zawartość liczbowa i krótkie pola tekstowe, szczególnie te z powtarzającymi się wartościami, są dobrymi wyborami. Podczas pracy z filtrami pamiętaj, że:

    • Filtry mogą być używane w zapytaniach wektorowych i niewektorowych, ale sam filtr jest stosowany w polach alfanumerycznych (niewektorów) w indeksie.

    • Pola z możliwością filtrowania mogą być opcjonalnie używane w nawigacji aspektowej.

    • Pola z możliwością filtrowania są zwracane w dowolnej kolejności, dlatego warto też rozważyć ich sortowanie.

  6. W przypadku pól wektorowych określ konfigurację wyszukiwania wektorowego i algorytmy używane do tworzenia ścieżek nawigacji i wypełniania miejsca osadzania. Aby uzyskać więcej informacji, zobacz Dodawanie pól wektorów.

    Pola wektorowe mają dodatkowe właściwości, których nie mają pola niewektorowe, takie jak algorytmy do użycia i kompresja wektorów.

    Pola wektorowe pomijają atrybuty, które nie są przydatne w danych wektorowych, takich jak sortowanie, filtrowanie i tworzenie aspektów.

  7. W przypadku pól niewektorowych określ, czy używać analizatora domyślnego ("analyzer": null) czy innego analizatora. Analizatory są używane do tokenizowania pól tekstowych podczas indeksowania i wykonywania zapytań.

    W przypadku ciągów wielojęzycznych należy rozważyć używanie analizatora języka.

    W przypadku ciągów z łącznikami lub znakami specjalnymi należy wziąć pod uwagę wyspecjalizowane analizatory. Jednym z przykładów jest słowo kluczowe , które traktuje całą zawartość pola jako pojedynczy token. To zachowanie jest przydatne w przypadku danych, takich jak kody pocztowe, identyfikatory i niektóre nazwy produktów. Aby uzyskać więcej informacji, zobacz temat Częściowe wyszukiwanie terminów i wzorce ze znakami specjalnymi.

Uwaga

Wyszukiwanie pełnotekstowe jest przeprowadzane na terminach, które są tokenizowane podczas indeksowania. Jeśli zapytania nie zwracają oczekiwanych wyników, przetestuj tokenizację, aby sprawdzić ciąg, którego szukasz, rzeczywiście istnieje. Możesz wypróbować różne analizatory w ciągach, aby zobaczyć, jak tokeny są tworzone dla różnych analizatorów.

Tworzenie indeksu

Gdy wszystko będzie gotowe do utworzenia indeksu, użyj klienta wyszukiwania, który może wysłać żądanie. Do wczesnego programowania i testowania koncepcji można użyć witryny Azure Portal lub interfejsów API REST. W przeciwnym razie często używa się zestawów SDK platformy Azure.

Podczas opracowywania zaplanuj częste ponowne kompilowanie. Ponieważ struktury fizyczne są tworzone w usłudze, usuwanie i ponowne tworzenie indeksów jest niezbędne w przypadku wielu modyfikacji. Możesz rozważyć pracę z podzbiorem danych, aby przyspieszyć ponowne kompilowanie.

Projektowanie indeksów za pośrednictwem portalu wymusza wymagania i reguły schematu dla określonych typów danych, takie jak brak możliwości wyszukiwania pełnotekstowego w polach liczbowych.

  1. Zaloguj się w witrynie Azure Portal.

  2. Sprawdź miejsce. usługa wyszukiwania podlegają maksymalnej liczbie indeksów, różniąc się w zależności od warstwy usług. Upewnij się, że masz miejsce na drugi indeks.

  3. Na stronie Przegląd usługi wyszukiwania wybierz jedną z opcji tworzenia indeksu wyszukiwania:

    • Dodawanie indeksu , osadzonego edytora do określania schematu indeksu
    • Kreatory importu

    Kreator to pełny przepływ pracy, który tworzy indeksator, źródło danych i gotowy indeks. Ładuje również dane. Jeśli jest to więcej niż to, co chcesz, użyj zamiast tego polecenia Dodaj indeks .

Na poniższym zrzucie ekranu wyróżniono pozycję Dodaj indeks i Importuj dane na pasku poleceń. Po utworzeniu indeksu można go znaleźć ponownie na karcie Indeksy .

Dodaj polecenie indeksu

Napiwek

Po utworzeniu indeksu w portalu możesz skopiować reprezentację JSON i dodać ją do kodu aplikacji.

Ustawianie corsOptions dla zapytań między źródłami

Schematy indeksów zawierają sekcję ustawienia corsOptions. Domyślnie język JavaScript po stronie klienta nie może wywoływać żadnych interfejsów API, ponieważ przeglądarki uniemożliwiają wszystkie żądania między źródłami. Aby zezwolić na wykonywanie zapytań między źródłami do indeksu, włącz mechanizm CORS (współużytkowanie zasobów między źródłami), ustawiając atrybut corsOptions . Ze względów bezpieczeństwa tylko interfejsy API zapytań obsługują mechanizm CORS.

"corsOptions": {
  "allowedOrigins": [
    "*"
  ],
  "maxAgeInSeconds": 300

Dla mechanizmu CORS można ustawić następujące właściwości:

  • allowedOrigins (wymagane): jest to lista źródeł, które mogą uzyskiwać dostęp do indeksu. Kod JavaScript obsługiwany z tych źródeł może wykonywać zapytania względem indeksu (zakładając, że obiekt wywołujący udostępnia prawidłowy klucz lub ma uprawnienia). Każde źródło jest zazwyczaj postacią protocol://<fully-qualified-domain-name>:<port> , chociaż <port> często jest pomijane. Aby uzyskać więcej informacji, zobacz Współużytkowanie zasobów między źródłami (Wikipedia).

    Jeśli chcesz zezwolić na dostęp do wszystkich źródeł, dołącz * go jako pojedynczy element w tablicy allowedOrigins . Nie jest to zalecana praktyka w przypadku usług wyszukiwania w środowisku produkcyjnym, ale często jest przydatna do programowania i debugowania.

  • maxAgeInSeconds (opcjonalnie): przeglądarki używają tej wartości do określenia czasu trwania (w sekundach) w celu buforowania odpowiedzi wstępnych CORS. Musi to być nieujemna liczba całkowita. Dłuższy okres pamięci podręcznej zapewnia lepszą wydajność, ale wydłuża czas, przez jaki zasady CORS muszą obowiązywać. Jeśli ta wartość nie jest ustawiona, zostanie użyty domyślny czas trwania pięciu minut.

Dozwolone aktualizacje istniejących indeksów

Tworzenie indeksu tworzy fizyczne struktury danych (pliki i odwrócone indeksy) w usłudze wyszukiwania. Po utworzeniu indeksu możliwość wprowadzania zmian przy użyciu polecenia Utwórz lub Aktualizuj indeks zależy od tego, czy modyfikacje unieważniają te struktury fizyczne. Nie można zmienić większości atrybutów pól po utworzeniu pola w indeksie.

Alternatywnie możesz utworzyć alias indeksu, który służy jako stabilne odwołanie w kodzie aplikacji. Zamiast aktualizować kod, możesz zaktualizować alias indeksu, aby wskazywał nowsze wersje indeksu.

Aby zminimalizować współczynnik zmian w procesie projektowania, w poniższej tabeli opisano, które elementy są stałe i elastyczne w schemacie. Zmiana stałego elementu wymaga ponownego kompilowania indeksu, natomiast elastyczne elementy można zmieniać w dowolnym momencie bez wpływu na implementację fizyczną.

Element Czy można je zaktualizować?
Nazwisko Nie.
Klucz Nie.
Nazwy i typy pól Nie.
Atrybuty pól (z możliwością wyszukiwania, filtrowanie, tworzenie aspektów, sortowanie) Nie.
Atrybut pola (możliwy do pobrania) Tak
Przechowywane (dotyczy wektorów) Nie.
Analizator Analizatory niestandardowe można dodawać i modyfikować w indeksie. W odniesieniu do przypisań analizatora w polach ciągów można modyfikować searchAnalyzertylko . Wszystkie inne przypisania i modyfikacje wymagają ponownej kompilacji.
Profile oceniania Tak
Funkcje sugestii Nie.
współużytkowanie zasobów między źródłami (CORS) Tak
Szyfrowanie Tak

Następne kroki

Skorzystaj z poniższych linków, aby zapoznać się z ładowaniem indeksu z danymi lub rozszerzaniem indeksu za pomocą mapy synonimów.