Tworzenie indeksu (interfejs API REST usługi Azure AI Search)

Indeks jest podstawowym sposobem organizowania i wyszukiwania dokumentów w usłudze Azure AI Search, podobnie jak w przypadku organizowania rekordów w bazie danych w tabeli. Każdy indeks zawiera kolekcję dokumentów, które są zgodne ze schematem indeksu (nazwy pól, typy danych i atrybuty), ale indeksy określają również dodatkowe konstrukcje (sugestory, profile oceniania i konfigurację MECHANIZMU CORS), które definiują inne zachowania wyszukiwania.

Możesz użyć metody POST lub PUT na żądanie. W przypadku jednej z nich dokument JSON w treści żądania zawiera definicję obiektu.

POST https://[servicename].search.windows.net/indexes?api-version=[api-version]  
  Content-Type: application/json
  api-key: [admin key]  

Alternatywnie możesz użyć funkcji PUT i określić nazwę indeksu w identyfikatorze URI.

PUT https://[servicename].search.windows.net/indexes/[index name]?api-version=[api-version]
  Content-Type: application/json
  api-key: [admin key]

Protokół HTTPS jest wymagany dla wszystkich żądań obsługi. Jeśli indeks nie istnieje, zostanie utworzony. Jeśli już istnieje, zostanie ona zaktualizowana do nowej definicji.

Tworzenie indeksu ustanawia schemat i metadane. Wypełnianie indeksu jest oddzielną operacją. W tym kroku można użyć indeksatora (zobacz Operacje indeksatora, dostępne dla obsługiwanych źródeł danych) lub Dodaj, Aktualizuj lub Usuń dokumenty. Odwrócone indeksy są generowane po opublikowaniu dokumentów.

Uwaga

Maksymalna liczba indeksów, które można utworzyć, różni się w zależności od warstwy cenowej. Aby uzyskać więcej informacji, zobacz Limity usługi.

Parametry identyfikatora URI

Parametr Opis
nazwa usługi Wymagane. Ustaw tę wartość na unikatową, zdefiniowaną przez użytkownika nazwę usługi wyszukiwania.
nazwa indeksu Wymagane dla identyfikatora URI w przypadku używania funkcji PUT. Nazwa musi mieć małe litery, zaczynać się literą lub cyfrą, nie ma ukośników ani kropek i ma mniej niż 128 znaków. Początek nazwy musi zaczynać się literą lub cyfrą, ale pozostała część nazwy może zawierać dowolną literę, cyfrę, podkreślenia i kreski, o ile podkreślenia i kreski nie są kolejne.
api-version Wymagane. Zobacz Wersje interfejsu API , aby uzyskać listę obsługiwanych wersji.

Nagłówki żądań

W poniższej tabeli opisano wymagane i opcjonalne nagłówki żądań.

Pola Opis
Content-Type Wymagane. Ustaw tę wartość na application/json
api-key Opcjonalnie, jeśli używasz ról platformy Azure , a token elementu nośnego jest dostarczany w żądaniu, w przeciwnym razie wymagany jest klucz. Tworzenie żądań musi zawierać api-key nagłówek ustawiony na klucz administratora (w przeciwieństwie do klucza zapytania). Aby uzyskać szczegółowe informacje, zobacz Nawiązywanie połączenia z usługą Azure AI Search przy użyciu uwierzytelniania klucza .

Treść żądania

Treść żądania zawiera definicję schematu, która zawiera listę pól danych w dokumentach, które zostaną przekazane do tego indeksu.

Poniższy kod JSON jest ogólną reprezentacją głównych części definicji.

{  
  "name": (optional on PUT; required on POST) "Name of the index",  
  "fields": [  
    {  
      "name": "name_of_field",  
      "type": "Edm.String | Edm.Int32 | Edm.Int64 | Edm.Double | Edm.Boolean | Edm.DateTimeOffset | Edm.GeographyPoint | Edm.ComplexType | Collection(Edm.String) | Collection(Edm.Int32) | Collection(Edm.Int64) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",  
      "searchable": true (default where applicable) | false (only Edm.String and Collection(Edm.String) fields can be searchable),  
      "filterable": true (default) | false,  
      "sortable": true (default where applicable) | false (Collection(Edm.String) fields cannot be sortable),  
      "facetable": true (default where applicable) | false (Edm.GeographyPoint fields cannot be facetable),  
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "retrievable": true (default) | false,  
      "analyzer": "name_of_analyzer_for_search_and_indexing", (only if 'searchAnalyzer' and 'indexAnalyzer' are not set)
      "searchAnalyzer": "name_of_search_analyzer", (only if 'indexAnalyzer' is set and 'analyzer' is not set)
      "indexAnalyzer": "name_of_indexing_analyzer", (only if 'searchAnalyzer' is set and 'analyzer' is not set)
      "synonymMaps": [ "name_of_synonym_map" ] (optional, only one synonym map per field is currently supported),
      "fields" : [ ... ] (optional, a list of sub-fields if this is a field of type Edm.ComplexType or Collection(Edm.ComplexType). Must be null or empty for simple fields.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (optional) [ ... ],  
  "analyzers":(optional) [ ... ],
  "charFilters":(optional) [ ... ],
  "tokenizers":(optional) [ ... ],
  "tokenFilters":(optional) [ ... ],
  "defaultScoringProfile": (optional) "Name of a custom scoring profile to use as the default",  
  "corsOptions": (optional) { },
  "encryptionKey":(optional) { }  
}  

Żądanie zawiera następujące właściwości:

Właściwość Opis
name Wymagane. Nazwa indeksu. Nazwa indeksu musi zawierać tylko małe litery, cyfry lub kreski, nie może zaczynać ani kończyć się kreskami i jest ograniczona do 128 znaków.
Pola Wymagane. Kolekcja pól, które zostaną wprowadzone do tego indeksu, w tym nazwa, typ danych i atrybuty definiujące dozwolone akcje w tym polu. Typy danych są zgodne z modelem danych jednostki (EDM). Aby uzyskać więcej informacji, zobacz Obsługiwane typy danych. W kolekcji musi znajdować się jedno pole, które jest określone jako pole klucza . Musi to być pole ciągu. To pole reprezentuje unikatowy identyfikator, czasami nazywany identyfikatorem dokumentu, dla każdego dokumentu przechowywanego z indeksem. W kluczach dokumentów jest rozróżniana wielkość liter. Na przykład dokument z kluczem "abc" jest uznawany za odrębny od dokumentu z kluczem "ABC".
Podobieństwo Opcjonalny. W przypadku usług utworzonych przed 15 lipca 2020 r. ustaw tę właściwość na użycie algorytmu klasyfikacji BM25. Prawidłowe wartości to "#Microsoft.Azure.Search.ClassicSimilarity" lub "#Microsoft.Azure.Search.BM25Similarity". Wersje interfejsu API, które obsługują tę właściwość, obejmują 2020-06-30 i 2019-05-06-Preview. Aby uzyskać więcej informacji, zobacz Ranking algorithms in Azure AI Search (Algorytmy klasyfikowania w usłudze Azure AI Search).
sugestory Opcjonalny. Służy do automatycznego uzupełniania zapytań lub sugerowanych wyników wyszukiwania, po jednym na indeks. Jest to struktura danych, która przechowuje prefiksy do dopasowywania do zapytań częściowych, takich jak autouzupełnianie i sugestie. Składa się z pól obsługujących name sugestie i, które zapewniają zawartość dla zapytań autouzupełnianych i sugerowanych wyników. searchMode wartość jest wymagana i zawsze ustawiona na analyzingInfixMatchingwartość . Określa, że dopasowanie będzie występować w dowolnym terminie w ciągu zapytania.
scoringProfiles Opcjonalny. Służy do niestandardowego klasyfikowania wyników wyszukiwania. Ustaw defaultScoringProfile opcję używania profilu niestandardowego jako domyślnego, wywoływanego za każdym razem, gdy profil niestandardowy nie jest określony w ciągu zapytania. Aby uzyskać więcej informacji na temat elementów, zobacz Dodawanie profilów oceniania do indeksu wyszukiwania i przykład w następnej sekcji.
analizatory, charFilters, tokenizatory, tokenFilters Opcjonalny. Określ te sekcje indeksu, jeśli definiujesz analizatory niestandardowe. Domyślnie te sekcje mają wartość null.
defaultScoringProfile Opcjonalny. Nazwa niestandardowego profilu oceniania, który zastępuje domyślne zachowania oceniania.
corsOptions Opcjonalny. Język JavaScript po stronie klienta nie może domyślnie wywoływać żadnych interfejsów API, ponieważ przeglądarka uniemożliwi wszystkie żądania między źródłami. Aby zezwolić na wykonywanie zapytań między źródłami w indeksie, 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. Sekcja corsOptions zawiera:allowedOrigins

(Wymagane) Rozdzielana przecinkami lista źródeł, które zostaną przyznane dostęp do indeksu, gdzie każde źródło jest zazwyczaj w postaci protocol://< zwa-kwalifikowana-domena>:<port> (chociaż <port> jest często pomijany). Oznacza to, że każdy kod JavaScript obsługiwany z tych źródeł będzie mógł wykonywać zapytania względem indeksu (przy założeniu, że zapewnia poprawny api-keykod ). Jeśli chcesz zezwolić na dostęp do wszystkich źródeł, określ * pojedynczy element w tablicy allowedOrigins . Nie jest to zalecane w środowisku produkcyjnym, ale może być przydatne w przypadku programowania lub debugowania.

maxAgeInSeconds (Opcjonalnie) Przeglądarki używają tej wartości do określenia czasu trwania (w sekundach) buforowania odpowiedzi wstępnych CORS. Musi to być nieujemna liczba całkowita. Większa jest ta wartość, tym lepsza będzie wydajność, ale tym dłużej będą obowiązywać zmiany zasad CORS. Jeśli nie zostanie ustawiona, zostanie użyty domyślny czas trwania 5 minut.
encryptionKey Opcjonalny. Służy do szyfrowania mapy synonimów przy użyciu własnych kluczy zarządzanych w usłudze Azure Key Vault. Dostępne dla rozliczanych usług wyszukiwania utworzonych w dniach lub po 2019-01-01.

Sekcja encryptionKey zawiera zdefiniowaną przez keyVaultKeyName użytkownika (wymaganą), wygenerowaną keyVaultKeyVersion przez system (wymaganą keyVaultUri ) i podając klucz (wymagany, nazywany również nazwą DNS). Przykładowy identyfikator URI może mieć wartość "https://my-keyvault-name.vault.azure.net"".

Opcjonalnie możesz określić accessCredentials , czy nie używasz tożsamości systemu zarządzanego. Właściwości dołączania accessCredentialsapplicationId (Tożsamość Microsoft Entra identyfikatora aplikacji, któremu udzielono uprawnień dostępu do określonej Key Vault platformy Azure) i applicationSecret (klucz uwierzytelniania zarejestrowanej aplikacji). Przykład w następnej sekcji ilustruje składnię.

Definicje pól

Podczas tworzenia indeksu można ustawić następujące atrybuty na polu.

Atrybut Opis
name Wymagane. Ustawia nazwę pola, które musi być unikatowe w kolekcji pól indeksu lub pola nadrzędnego.
typ Wymagane. Ustawia typ danych dla pola. Pola mogą być proste lub złożone. Proste pola są typami pierwotnymi, takimi jak Edm.String tekst lub Edm.Int32 liczba całkowita. Pola złożone mogą zawierać pola podrzędne, które same są proste lub złożone. Dzięki temu można modelować obiekty i tablice obiektów, co z kolei umożliwia przekazywanie większości struktur obiektów JSON do indeksu. Zobacz Obsługiwane typy danych (Azure AI Search), aby uzyskać pełną listę obsługiwanych typów.
key Wymagane. Ustaw ten atrybut na wartość true, aby wyznaczyć wartości pola unikatowo identyfikują dokumenty w indeksie. Maksymalna długość wartości w polu klucza to 1024 znaki. Należy wybrać dokładnie jedno pole najwyższego poziomu w każdym indeksie jako pole klucza i musi być typu Edm.String. Wartość domyślna dotyczy false prostych pól i null pól złożonych.

Pola kluczy mogą służyć do bezpośredniego wyszukiwania dokumentów i aktualizowania lub usuwania określonych dokumentów. Wartości pól kluczy są obsługiwane w sposób uwzględniający wielkość liter podczas wyszukiwania lub indeksowania dokumentów. Aby uzyskać szczegółowe informacje, zobacz Wyszukiwanie dokumentów (interfejs API REST usługi Azure AI Search) i Dodawanie, aktualizowanie lub usuwanie dokumentów (interfejs API REST usługi Azure AI Search).
pobieranie Wskazuje, czy pole może być zwracane w wynikach wyszukiwania. Ustaw ten atrybut na false wartość , jeśli chcesz użyć pola (na przykład marginesu) jako mechanizmu filtrowania, sortowania lub oceniania, ale nie chcesz, aby pole było widoczne dla użytkownika końcowego. Ten atrybut musi być true przeznaczony dla pól klucza i musi być null przeznaczony dla pól złożonych. Ten atrybut można zmienić w istniejących polach. Ustawienie możliwego do true pobrania nie powoduje wzrostu wymagań dotyczących magazynu indeksów. Wartość domyślna dotyczy true prostych pól i null pól złożonych.
Przeszukiwania Wskazuje, czy pole jest możliwe do wyszukiwania pełnotekstowego i może być przywoływalne w zapytaniach wyszukiwania. Oznacza to, że zostanie ona poddana analizie leksykalnej , takiej jak łamanie wyrazów podczas indeksowania. Jeśli ustawisz pole z możliwością wyszukiwania na wartość, na przykład "Sunny day", wewnętrznie zostanie znormalizowane i podzielone na poszczególne tokeny "sunny" i "day". Umożliwia to wyszukiwanie pełnotekstowe dla tych terminów. Pola typu Edm.String lub Collection(Edm.String) domyślnie można wyszukiwać. Ten atrybut musi być false przeznaczony dla prostych pól innych typów danych innych niż ciąg i musi być null przeznaczony dla pól złożonych.

Pole z możliwością wyszukiwania zużywa dodatkowe miejsce w indeksie, ponieważ usługa Azure AI Search przetworzy zawartość tych pól i zorganizuje je w pomocniczych strukturach danych na potrzeby wydajnego wyszukiwania. Jeśli chcesz zaoszczędzić miejsce w indeksie i nie potrzebujesz pola, które ma być uwzględnione w wyszukiwaniach, ustaw wartość .false Aby uzyskać szczegółowe informacje, zobacz Jak działa wyszukiwanie pełnotekstowe w usłudze Azure AI Search .
Filterable Wskazuje, czy pole ma być przywołyne w $filter zapytaniach. Filtrowanie różni się od możliwości wyszukiwania w sposobie obsługi ciągów. Pola typu Edm.String lub Collection(Edm.String) , które można filtrować, nie są poddawane analizie leksykalnej, więc porównania są przeznaczone tylko dla dokładnych dopasowań. Jeśli na przykład ustawisz takie pole f na "Słoneczny dzień", $filter=f eq 'sunny' nie znajdzie dopasowań, ale $filter=f eq 'Sunny day' będzie. Ten atrybut musi być null przeznaczony dla pól złożonych. Wartość domyślna dotyczy true prostych pól i null pól złożonych. Aby zmniejszyć rozmiar indeksu, ustaw ten atrybut na false wartość w polach, dla których nie będziesz filtrować.
Sortowania Wskazuje, czy pole ma być przywoływane w $orderby wyrażeniach. Domyślnie usługa Azure AI Search sortuje wyniki według wyników, ale w wielu środowiskach użytkownicy będą chcieli sortować według pól w dokumentach. Proste pole może być sortowane tylko wtedy, gdy jest jednowartościowe (ma pojedynczą wartość w zakresie dokumentu nadrzędnego).

Proste pola kolekcji nie mogą być sortowane, ponieważ są wielowartośćowe. Proste podpola złożonych kolekcji są również wielowartościowe i dlatego nie można sortować. Dotyczy to zarówno natychmiastowego pola nadrzędnego, jak i pola nadrzędnego, czyli kolekcji złożonej. Pola złożone nie mogą być sortowalne, a atrybut sortowalny musi być null przeznaczony dla takich pól. Wartością domyślną sortowania są true pola proste z jedną wartością, false pola proste z wieloma wartościami i null pola złożone.
aspektowe Wskazuje, czy pole ma być przywołyne w zapytaniach aspektowych. Zazwyczaj używane w prezentacji wyników wyszukiwania, które obejmują liczbę trafień według kategorii (na przykład wyszukiwanie cyfrowych aparatów fotograficznych i wyświetlanie trafień według marki, przez megapięci, według ceny itd.). Ten atrybut musi być null przeznaczony dla pól złożonych. Pola typu Edm.GeographyPoint lub Collection(Edm.GeographyPoint) nie mogą być aspektami. Wartość domyślna dotyczy true wszystkich innych prostych pól. Aby zmniejszyć rozmiar indeksu, ustaw ten atrybut na false wartość w polach, dla których nie będziesz ustawiać aspektów.
Analizator Ustawia analizator leksykalny do tokenizowania ciągów podczas operacji indeksowania i wykonywania zapytań. Prawidłowe wartości tej właściwości obejmują analizatory języka, wbudowane analizatory i analizatoryniestandardowe. Wartość domyślna to standard.lucene. Tego atrybutu można używać tylko z polami ciągów z możliwością wyszukiwania i nie można go ustawić razem z parametrem searchAnalyzer lub indexAnalyzer. Po wybraniu analizatora i utworzeniu pola w indeksie nie można go zmienić dla pola. Musi być null przeznaczony dla pól złożonych.
searchAnalyzer Ustaw tę właściwość w połączeniu z indexAnalyzer, aby określić różne analizatory leksykalne na potrzeby indeksowania i zapytań. Jeśli używasz tej właściwości, ustaw analizator na null i upewnij się, że właściwość indexAnalyzer jest ustawiona na dozwoloną wartość. Prawidłowe wartości tej właściwości obejmują wbudowane analizatory i analizatory niestandardowe. Tego atrybutu można używać tylko z polami z możliwością wyszukiwania. Analizator wyszukiwania można zaktualizować w istniejącym polu, ponieważ jest on używany tylko w czasie wykonywania zapytania. Musi być null przeznaczony dla pól złożonych.
indexAnalyzer Ustaw tę właściwość w połączeniu z elementem searchAnalyzer, aby określić różne analizatory leksykalne na potrzeby indeksowania i zapytań. Jeśli używasz tej właściwości, ustaw analizator na null i upewnij się, że właściwość searchAnalyzer jest ustawiona na dozwoloną wartość. Prawidłowe wartości tej właściwości obejmują wbudowane analizatory i analizatory niestandardowe. Tego atrybutu można używać tylko z polami z możliwością wyszukiwania. Po wybraniu analizatora indeksu nie można go zmienić dla pola. Musi być null przeznaczony dla pól złożonych.
synonimyMapy Lista nazw synonimów map do skojarzenia z tym polem. Tego atrybutu można używać tylko z polami z możliwością wyszukiwania. Obecnie jest obsługiwana tylko jedna mapa synonimów na pole. Przypisanie mapy synonimów do pola zapewnia, że terminy zapytania przeznaczone dla tego pola są rozwijane w czasie wykonywania zapytań przy użyciu reguł na mapie synonimów. Ten atrybut można zmienić w istniejących polach. Musi być null lub pustą kolekcją dla pól złożonych.
fields Lista pól podrzędnych, jeśli jest to pole typu Edm.ComplexType lub Collection(Edm.ComplexType). Musi być null lub być pusty dla prostych pól. Zobacz How to model complex data types in Azure AI Search (Jak modelować złożone typy danych w usłudze Azure AI Search ), aby uzyskać więcej informacji o tym, jak i kiedy używać pól podrzędnych.

Uwaga

Pola typu Edm.String , które można filtrować, sortować lub aspektów, mogą mieć długość co najwyżej 32 kilobajtów. Wynika to z tego, że wartości takich pól są traktowane jako pojedynczy termin wyszukiwania, a maksymalna długość terminu w usłudze Azure AI Search wynosi 32 kilobajty. Jeśli musisz przechowywać więcej tekstu niż w jednym polu ciągu, musisz jawnie ustawić filtrowanie, sortowanie i tworzenie aspektów false w definicji indeksu.

Ustawienie pola jako możliwego do wyszukiwania, filtrowania, sortowania lub tworzenia aspektów ma wpływ na rozmiar indeksu i wydajność zapytań. Nie ustawiaj tych atrybutów w polach, do których nie należy odwoływać się w wyrażeniach zapytań.

Jeśli pole nie jest ustawione na wyszukiwanie, filtrowanie, sortowanie lub tworzenie aspektów, nie można odwoływać się do pola w żadnym wyrażeniu zapytania. Jest to przydatne w przypadku pól, które nie są używane w zapytaniach, ale są potrzebne w wynikach wyszukiwania.

Uwaga

Maksymalna liczba indeksów, które można utworzyć, różni się w zależności od warstwy cenowej. Aby uzyskać więcej informacji, zobacz Limity usługi.

Reakcja

W przypadku pomyślnego żądania powinien zostać wyświetlony kod stanu "201 Utworzony".

Domyślnie treść odpowiedzi zawiera kod JSON definicji indeksu. Jeśli Prefer jednak nagłówek żądania ma wartość return=minimal, treść odpowiedzi jest pusta, a kod stanu powodzenia to "204 Brak zawartości" zamiast "201 Utworzono". Jest to prawda niezależnie od tego, czy funkcja PUT lub POST jest używana do tworzenia indeksu.

Przykłady

Przykład: schemat indeksu

{
  "name": "hotels",  
  "fields": [
    { "name": "HotelId", "type": "Edm.String", "key": true, "filterable": true },
    { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": true, "facetable": false },
    { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.microsoft" },
    { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.microsoft" },
    { "name": "Category", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
    { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "sortable": false, "facetable": true, "analyzer": "tagsAnalyzer" },
    { "name": "ParkingIncluded", "type": "Edm.Boolean", "filterable": true, "sortable": true, "facetable": true },
    { "name": "LastRenovationDate", "type": "Edm.DateTimeOffset", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },
    { "name": "Address", "type": "Edm.ComplexType", 
      "fields": [
          { "name": "StreetAddress", "type": "Edm.String", "filterable": false, "sortable": false, "facetable": false, "searchable": true },
          { "name": "City", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "StateProvince", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "PostalCode", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true },
          { "name": "Country", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "facetable": true }
        ]
    },
    { "name": "Location", "type": "Edm.GeographyPoint", "filterable": true, "sortable": true },
    { "name": "Rooms", "type": "Collection(Edm.ComplexType)", 
      "fields": [
          { "name": "Description", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "en.lucene" },
          { "name": "Description_fr", "type": "Edm.String", "searchable": true, "filterable": false, "sortable": false, "facetable": false, "analyzer": "fr.lucene" },
          { "name": "Type", "type": "Edm.String", "searchable": true },
          { "name": "BaseRate", "type": "Edm.Double", "filterable": true, "facetable": true },
          { "name": "BedOptions", "type": "Edm.String", "searchable": true },
          { "name": "SleepsCount", "type": "Edm.Int32", "filterable": true, "facetable": true },
          { "name": "SmokingAllowed", "type": "Edm.Boolean", "filterable": true, "facetable": true },
          { "name": "Tags", "type": "Collection(Edm.String)", "searchable": true, "filterable": true, "facetable": true, "analyzer": "tagsAnalyzer" }
        ]
    }
  ],
  "suggesters": [
      { "name": "sg", "searchMode": "analyzingInfixMatching", "sourceFields": ["HotelName"] }
  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ]
}  

Przykład: Sugestory

 "suggesters": [  
   {  
     "name": "name of suggester",  
     "searchMode": "analyzingInfixMatching",  
     "sourceFields": ["field1", "field2", ...]  
   }  
 ]

Do sugestora odwołuje się nazwa żądań zapytań, które zawierają interfejs API sugestii lub interfejs API autouzupełniania, w zależności od tego, czy chcesz zwrócić dopasowanie, czy pozostałą część terminu zapytania. Aby uzyskać więcej informacji na temat tworzenia i używania sugestora, zobacz Tworzenie sugestora.

Przykład: Podobieństwo dla istotności wyszukiwania

Ta właściwość ustawia algorytm klasyfikacji używany do tworzenia oceny istotności w wynikach wyszukiwania pełnotekstowego zapytania wyszukiwania. W usługach utworzonych po 15 lipca 2020 r. ta właściwość jest ignorowana, ponieważ algorytm podobieństwa jest zawsze BM25. W przypadku istniejących usług utworzonych przed 15 lipca 2020 r. możesz wyrazić zgodę na BM25, ustawiając tę konstrukcję w następujący sposób:

 "similarity": {
     "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
 }

Przykład: opcje mechanizmu CORS

Język JavaScript po stronie klienta nie może domyślnie wywoływać żadnych interfejsów API, ponieważ przeglądarka uniemożliwi wszystkie żądania między źródłami. Aby zezwolić na wykonywanie zapytań między źródłami w indeksie, włącz mechanizm CORS (współużytkowanie zasobów między źródłami (Wikipedia)), ustawiając corsOptions atrybut . Ze względów bezpieczeństwa tylko interfejsy API zapytań obsługują mechanizm CORS.

{
   "name": "hotels",  
   "fields": [ omitted for brevity],
   "suggesters": [ omitted for brevity  ],
   "analyzers": [ omitted for brevity ],
   "corsOptions": (optional) {  
       "allowedOrigins": ["*"] | ["https://docs.microsoft.com:80", "https://azure.microsoft.com:80", ...],  
       "maxAgeInSeconds": (optional) max_age_in_seconds (non-negative integer)  
     }
}

Przykład: klucze szyfrowania

Klucze szyfrowania to klucze zarządzane przez klienta używane do dodatkowego szyfrowania. Aby uzyskać więcej informacji, zobacz Szyfrowanie przy użyciu kluczy zarządzanych przez klienta w usłudze Azure Key Vault.

{
    "name": "hotels",  
    "fields": [ omitted for brevity],
    "suggesters": [ omitted for brevity  ],
    "analyzers": [ omitted for brevity ],
    "encryptionKey": (optional) { 
      "keyVaultKeyName": "Name of the Azure Key Vault key used for encryption",
      "keyVaultKeyVersion": "Version of the Azure Key Vault key",
      "keyVaultUri": "URI of Azure Key Vault, also referred to as DNS name, that provides the key. An example URI might be https://my-keyvault-name.vault.azure.net",
      "accessCredentials": (optional, only if not using managed system identity) {
        "applicationId": "AAD Application ID that was granted access permissions to your specified Azure Key Vault",
        "applicationSecret": "Authentication key of the specified AAD application)"}
      }
} 

Przykład: profile oceniania

Profil oceniania to sekcja schematu, która definiuje niestandardowe zachowania oceniania, które pozwalają wpływać na to, które dokumenty pojawiają się wyżej w wynikach wyszukiwania. Profile oceniania składają się z wag i funkcji pól. Aby ich używać, należy określić profil według nazwy w ciągu zapytania. Aby uzyskać więcej informacji, zobacz Dodawanie profilów oceniania do indeksu wyszukiwania , aby uzyskać szczegółowe informacje.

{
   "name": "hotels",  
   "fields": [ omitted for brevity],
   "suggesters": [ omitted for brevity  ],
   "analyzers": [ omitted for brevity ],
   "scoringProfiles": [  
   {  
     "name": "name of scoring profile",  
     "text": (optional, only applies to searchable fields) {  
       "weights": {  
         "searchable_field_name": relative_weight_value (positive #'s),  
         ...  
       }  
     },  
     "functions": (optional) [  
       {  
         "type": "magnitude | freshness | distance | tag",  
         "boost": # (positive number used as multiplier for raw score != 1),  
         "fieldName": "...",  
         "interpolation": "constant | linear (default) | quadratic | logarithmic",  
         "magnitude": {  
           "boostingRangeStart": #,  
           "boostingRangeEnd": #,  
           "constantBoostBeyondRange": true | false (default)  
         },  
         "freshness": {  
           "boostingDuration": "..." (value representing timespan leading to now over which boosting occurs)  
         },  
         "distance": {  
           "referencePointParameter": "...", (parameter to be passed in queries to use as reference location)  
           "boostingDistance": # (the distance in kilometers from the reference location where the boosting range ends)  
         },  
         "tag": {  
           "tagsParameter": "..." (parameter to be passed in queries to specify a list of tags to compare against target fields)  
         }  
       }  
     ],  
     "functionAggregation": (optional, applies only when functions are specified)   
       "sum (default) | average | minimum | maximum | firstMatching"  
       }  
 ]
}

Przykład: mapy synonimów

Po utworzeniu mapy synonimów w usłudze wyszukiwania można przypisać ją do searchable pól typu Edm.String lub Collection(Edm.String) w indeksie. Poniższa definicja indeksu konfiguruje pole "gatunek" tak, aby używało mapy synonimów "mysynonymmap".

Możesz użyć aktualizacji indeksu , aby dodać tę właściwość do istniejącego pola. Właściwość synonymMaps pola określa mapę (jedną na pole). Właściwości istniejących pól można zaktualizować synonymMaps w dowolnym momencie.

Wykonaj zapytanie w zwykły sposób, używając terminów lub fraz (ujęta w cudzysłów). W usłudze Azure AI Search terminy dwuczęściowe, takie jak "wanna z hydromasażem", muszą być wyrażone jako fraza. W przeciwnym razie każdy termin jest oceniany niezależnie. Jeśli zapytasz o "wannę z hydromasażem", wyszukiwarka będzie skanować pod kątem tej frazy, a także wszelkie zdefiniowane synonimy, takie jak jacuzzi.

POST /indexes?api-version=2020-06-30
{
    "name":"myindex",
    "fields":[
    ...
        {
            "name":"genre",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"en.lucene",
            "synonymMaps": [
                "mysynonymmap"
            ]
        }
    ]
    ...
}

Zobacz też