Tworzenie lub aktualizowanie indeksu (interfejs API REST w wersji zapoznawczej)

Dotyczy: 2023-07-01-Preview, 2021-04-30-Preview, 2020-06-30-Preview

Ważne

2023-07-01-Preview dodaje wyszukiwanie wektorów.

  • Obiekt "vectorSearch", konfiguracja ustawień wyszukiwania wektorowego. Dotyczy tylko algorytmów wyszukiwania wektorowego.
  • Typ danych "Collection(Edm.Single)" wymagany dla pola wektora. Reprezentuje liczbę zmiennoprzecinkową o pojedynczej precyzji jako typ pierwotny.
  • Właściwość "dimensions" wymagana dla pola wektora. Reprezentuje wymiarowość osadzonych wektorów.
  • Właściwość "vectorSearchConfiguration" wymagana dla pola wektora. Wybiera konfigurację algorytmu dla tego pola.

2021-04-30-Preview dodaje:

  • "semanticConfiguration" używany do określania zakresu klasyfikacji semantycznej dla określonych pól.
  • "identity" w obszarze "encryptionKey" służy do pobierania klucza szyfrowania zarządzanego przez klienta z platformy Azure Key Vault przy użyciu tożsamości zarządzanej przypisanej przez użytkownika.

2020-06-30-Preview dodaje:

  • "normalizers", używany do uwzględniania wielkości liter w sortowaniu i filtrach.

Indeks określa schemat indeksu, w tym kolekcję pól (nazwy pól, typy danych i atrybuty), ale także inne konstrukcje (sugestory, profile oceniania i konfigurację MECHANIZMU CORS), które definiują inne zachowania wyszukiwania.

Możesz użyć funkcji POST lub PUT w żądaniu tworzenia. W przypadku każdej z nich treść żądania zawiera definicję obiektu.

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

W przypadku żądań aktualizacji użyj polecenia PUT i określ 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 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. Maksymalna liczba indeksów, które można utworzyć, zależy od warstwy cenowej. W każdym indeksie istnieją ograniczenia dotyczące poszczególnych elementów. Aby uzyskać więcej informacji, zobacz Limity usług dla usługi Azure AI Search.

Aktualizowanie istniejącego indeksu musi zawierać pełną definicję schematu, w tym wszelkie oryginalne definicje, które chcesz zachować. Ogólnie rzecz biorąc, najlepszym wzorcem aktualizacji jest pobranie definicji indeksu za pomocą polecenia GET, zmodyfikowanie go, a następnie zaktualizowanie go za pomocą polecenia PUT.

Ponieważ istniejący indeks zawiera zawartość, wiele modyfikacji indeksu wymaga upuszczania i ponownego kompilowania indeksu. Następujące zmiany schematu są wyjątkiem od tej reguły:

  • Dodawanie nowych pól

  • Dodawanie lub zmienianie profilów oceniania

  • Dodawanie lub zmienianie konfiguracji semantycznych

  • Zmienianie opcji mechanizmu CORS

  • Zmiana istniejących pól przy użyciu dowolnej z następujących trzech modyfikacji:

    • Pokazywanie lub ukrywanie pól (retrievabletrue | false)
    • Zmienianie analizatora używanego w czasie zapytania (searchAnalyzer)
    • Dodawanie lub edytowanie synonimuMap używanego w czasie zapytania (synonymMaps)

Aby wprowadzić dowolne z powyższych zmian schematu w istniejącym indeksie, określ nazwę indeksu dla identyfikatora URI żądania, a następnie dołącz w pełni określoną definicję indeksu z nowymi lub zmienionymi elementami.

Po dodaniu nowego pola wszystkie istniejące dokumenty w indeksie automatycznie mają wartość null dla tego pola. Brak dodatkowego miejsca do magazynowania, dopóki nie wystąpi jedna z dwóch rzeczy: zostanie podana wartość nowego pola (przy użyciu scalania) lub zostaną dodane nowe dokumenty.

Aktualizacje z suggester podobnymi ograniczeniami: nowe pola można dodawać do suggester pól jednocześnie, ale istniejące pola nie mogą być usuwane ani dodawane bez suggesters ponownego kompilowania indeksu.

Aktualizacje analizatora, tokenizatora, filtru tokenu lub filtru char nie są dozwolone. Nowe można tworzyć przy użyciu żądanych zmian, ale należy przełączyć indeks w tryb offline podczas dodawania nowych definicji analizatora. Ustawienie flagi allowIndexDowntime na wartość true w żądaniu aktualizacji indeksu powoduje przełączenie indeksu w tryb offline:

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=[api-version]&allowIndexDowntime=true

Ta operacja trwa offline indeksu przez co najmniej kilka sekund, co oznacza, że indeksowanie i żądania zapytań kończą się niepowodzeniem, dopóki indeks nie zostanie z powrotem w trybie online i będzie gotowy do obsługi żądań.

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 w identyfikatorze URI, jeśli używasz 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. Kreski nie mogą być kolejne.
api-version Wymagane. Bieżąca wersja zapoznawcza to 2023-07-23-preview. Zobacz Wersje interfejsu API , aby uzyskać więcej wersji.
allowIndexDowntime Opcjonalny. Domyślnie fałsz. Ustaw wartość true dla niektórych aktualizacji, takich jak dodawanie lub modyfikowanie analizatora, tokenizatora, filtru tokenu, filtru char lub właściwości podobieństwa. Indeks jest w trybie offline podczas aktualizacji, zwykle nie więcej niż kilka sekund.

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 udostępniany w żądaniu, w przeciwnym razie wymagany jest klucz. Klucz api-key to unikatowy, generowany przez system ciąg, który uwierzytelnia żądanie w usłudze wyszukiwania. 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 są przekazywane do tego indeksu.

Poniższy kod JSON to wysoka reprezentacja schematu, który obsługuje wyszukiwanie wektorów. Schemat wymaga pola klucza, a to pole klucza może być możliwe do przeszukiwania, filtrowania, sortowania i tworzenia aspektów.

Pole wyszukiwania wektorowego ma typ Collection(Edm.Single). Ponieważ pola wektorów nie są tekstowe, pole wektorowe nie może być używane jako klucz i nie akceptuje analizatorów, normalizatorów, sugestorów ani synonimów. Musi mieć właściwość "dimensions" i właściwość "vectorSearchConfiguration".

Schemat obsługujący wyszukiwanie wektorów może również obsługiwać wyszukiwanie słów kluczowych. Inne pola niewektorowe w indeksie mogą używać dowolnych analizatorów, synonimów i profilów oceniania uwzględninych w indeksie.

{  
  "name": (optional on PUT; required on POST) "Name of the index",
  "description": (optional) "Description 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.Single) | Collection(Edm.Double) | Collection(Edm.Boolean) | Collection(Edm.DateTimeOffset) | Collection(Edm.GeographyPoint) | Collection(Edm.ComplexType)",
      "key": true | false (default, only Edm.String fields can be keys, enable on one field only),  
      "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),  
      "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)
      "normalizer": "name_of_normalizer", (optional, applies only to filterable, facetable, or sortable Edm.String and Collection(Edm.String) fields.)
      "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.)
      "dimensions": 1234, (required for vector field definitions. Prohibited for non-vector fields. Integer specifying the dimensionality of the embeddings generated by a machine learning model)
      "vectorSearchConfiguration": "name_of_algorithm_config" (required for vector field definitions. Prohibited for non-vector fields. This should reference an algorithm configuration.)
    }
  ],
  "similarity": (optional) { },
  "suggesters": (optional) [ ... ],  
  "scoringProfiles": (optional) [ ... ],  
  "semantic": (optional) { },
  "vectorSearch": (optional) {
    "algorithmConfigurations": [
        {
            "name": "name_of_algorithm_config",
            "kind": "hnsw" (algorithm type. Only "hnsw" is supported currently.),
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]},
  "normalizers":(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.
description (opis) Opcjonalny opis.
Pola Kolekcja pól dla tego indeksu, w którym każde pole ma nazwę, obsługiwany typ danych zgodny z modelem danych jednostki (EDM) i atrybutami definiującymi dozwolone akcje w tym polu. Kolekcja pól musi mieć jedno pole typu Edm.String z wartością "key" ustawioną na "true". To pole reprezentuje unikatowy identyfikator, czasami nazywany identyfikatorem dokumentu, dla każdego dokumentu przechowywanego z indeksem. Kolekcja pól akceptuje teraz pola wektorów.
Podobieństwo Opcjonalny. W przypadku usług utworzonych przed 15 lipca 2020 r. ustaw tę właściwość na opcję algorytmu klasyfikacji BM25.
sugestory Określa konstrukcję, która przechowuje prefiksy do dopasowywania do częściowych zapytań, takich jak autouzupełniania i sugestie.
scoringProfiles Opcjonalny. Służy do dostrajania istotności dla zapytań pełnotekstowych.
Semantyczne Opcjonalny. Definiuje parametry indeksu wyszukiwania, który ma wpływ na możliwości wyszukiwania semantycznego. W przypadku zapytań semantycznych wymagana jest konfiguracja semantyczna. Aby uzyskać więcej informacji, zobacz Tworzenie zapytania semantycznego.
vectorSearch Opcjonalny. Konfiguruje różne ustawienia wyszukiwania wektorów. Można skonfigurować tylko algorytmy wyszukiwania wektorowego.
normalizatory Opcjonalny. Normalizuje kolejność leksykograficzną ciągów, tworząc sortowanie bez uwzględniania wielkości liter i filtrowanie danych wyjściowych.
analizatory, charFilters, tokenizery, tokenFilters Opcjonalny. Określ te sekcje indeksu, jeśli definiujesz analizatory niestandardowe. Domyślnie te sekcje mają wartość null.
defaultScoringProfile Nazwa niestandardowego profilu oceniania, który zastępuje domyślne zachowania oceniania.
corsOptions Opcjonalny. Służy do tworzenia zapytań między źródłami w indeksie.
encryptionKey Opcjonalny. Służy do dodatkowego szyfrowania indeksu za pośrednictwem kluczy szyfrowania zarządzanych przez klienta (CMK) w usłudze Azure Key Vault. Dostępne dla rozliczanych usług wyszukiwania utworzonych w dniach lub po 2019-01-01.

Reakcja

Aby pomyślnie utworzyć żądanie, powinien zostać wyświetlony kod stanu "201 Utworzony". Domyślnie treść odpowiedzi zawiera kod JSON dla utworzonej definicji indeksu. Jeśli jednak nagłówek preferuj żądanie ma wartość return=minimum, treść odpowiedzi jest pusta, a kod stanu powodzenia to "204 Brak zawartości" zamiast "201 Utworzono". Jest to prawdą niezależnie od tego, czy funkcja PUT lub POST jest używana do tworzenia indeksu.

W przypadku pomyślnego żądania aktualizacji powinien zostać wyświetlony komunikat "204 Brak zawartości". Domyślnie treść odpowiedzi jest pusta. Prefer Jeśli jednak nagłówek żądania ma wartość return=representation, treść odpowiedzi zawiera kod JSON dla zaktualizowanej definicji indeksu. W takim przypadku kod stanu powodzenia to "200 OK".

Przykłady

Przykład: wektor

Wyszukiwanie wektorowe jest implementowane na poziomie pola. Ta definicja koncentruje się na polach wektorów. Pola wektorowe muszą być typu Collection(Edm.Single) używane do przechowywania wartości zmiennoprzecinkowych o pojedynczej precyzji. Pola wektorowe mają właściwość "wymiarów", która zawiera liczbę wymiarów wyjściowych obsługiwanych przez model uczenia maszynowego używany do generowania osadzania. Jeśli na przykład używasz funkcji osadzania tekstu-ada-002, maksymalna liczba wymiarów wyjściowych wynosi 1536 na ten dokument. Parametr "algorithmConfiguration" jest ustawiony na nazwę konfiguracji "vectorSearch" w indeksie. Można zdefiniować wiele w indeksie, a następnie określić jedną na pole.

Wiele atrybutów ma zastosowanie tylko do pól niewektorów. Atrybuty takie jak "filterable", "sortable", "facetable", "analyzer", "normalizer" i "synonymMaps" są ignorowane dla pól wektorów. Podobnie jeśli ustawisz właściwości tylko wektorów, takie jak "wymiary" lub "vectorSearchConfiguration" w polu zawierającym zawartość alfanumeryczną, te atrybuty są ignorowane.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "retrievable": true,
            "filterable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "key": false,
            "searchable": true,
            "retrievable": true,
            "filterable": false,  
            "sortable": false,  
            "facetable": false,
            "analyzer": "",
            "searchAnalyzer": "",
            "indexAnalyzer": "",
            "normalizer": "",
            "synonymMaps": "", 
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    }
}

Przykład: kolekcje pól z polami wektorowymi i niewektorowymi

Wyszukiwanie wektorowe jest implementowane na poziomie pola. Aby obsługiwać scenariusze zapytań hybrydowych, utwórz pary pól dla zapytań wektorowych i niewektorowych. Pola "title", "titleVector", "content", "contentVector" są zgodne z tą konwencją. Jeśli chcesz również używać wyszukiwania semantycznego, musisz mieć pola tekstowe niewektorowe dla tych zachowań.

{
    "name": "{{index-name}}",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true,
            "filterable": true
        },
        {
            "name": "title",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "category",
            "type": "Edm.String",
            "filterable": true,
            "searchable": true,
            "retrievable": true
        },
        {
            "name": "titleVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        },
        {
            "name": "contentVector",
            "type": "Collection(Edm.Single)",
            "searchable": true,
            "retrievable": true,
            "dimensions": 1536,
            "vectorSearchConfiguration": "my-vector-config"
        }
    ],
    "corsOptions": {
        "allowedOrigins": [
            "*"
        ],
        "maxAgeInSeconds": 60
    },
    "vectorSearch": {
        "algorithmConfigurations": [
            {
                "name": "my-vector-config",
                "kind": "hnsw",
                "hnswParameters": {
                    "m": 4,
                    "efConstruction": 400,
                    "efSearch": 500,
                    "metric": "cosine"
                }
            }
        ]
    },
    "semantic": {
        "configurations": [
            {
                "name": "my-semantic-config",
                "prioritizedFields": {
                    "titleField": {
                        "fieldName": "title"
                    },
                    "prioritizedContentFields": [
                        {
                            "fieldName": "content"
                        }
                    ],
                    "prioritizedKeywordsFields": [
                        {
                            "fieldName": "category"
                        }
                    ]
                }
            }
        ]
    }
}

Przykład: schemat indeksu z prostymi i złożonymi polami

W pierwszym przykładzie przedstawiono kompletny schemat indeksu z prostymi i złożonymi polami. Co najmniej jedno pole ciągu musi mieć wartość "klucz" ustawioną na wartość true.

{
  "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", "normalizer": "tagsNormalizer" },
    { "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, "normalizer": "lowercase" },
          { "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", "normalizer": "tagsNormalizer" }
        ]
    }
  ],
  "suggesters": [ ],
  "analyzers": [ ],
  "normalizers": [ ],
  "encryptionKey": [ ]
}  

Przykład: sugestorzy

Definicja sugestora powinna określać pola ciągów "z możliwością wyszukiwania" i "możliwe do pobierania" (w interfejsach API REST wszystkie proste pola są "retrievable": true domyślnie). Po zdefiniowaniu sugestora można odwoływać się do niego według nazwy w żądaniach zapytań, które używają interfejsu API sugestii lub interfejsu API autouzupełniania, w zależności od tego, czy chcesz zwrócić dopasowanie, czy pozostałą część terminu zapytania.

{
  "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", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "suggesters": [
    {  
      "name": "sg",  
      "searchMode": "analyzingInfixMatching",  
      "sourceFields": ["HotelName", "Category", "Tags"]  
    } 
  ]
} 

Przykład: Analizatory i normalizacje

Analizatory i normalizacje są przywoływane w definicjach pól i mogą być wstępnie zdefiniowane lub niestandardowe. Jeśli używasz analizatorów niestandardowych lub normalizacji, określ je w indeksie w sekcjach "analizatory" i "normalizacje".

W poniższym przykładzie przedstawiono niestandardowe analizatory i normalizacje dla tagów. Demonstruje również wstępnie zdefiniowany znormalizowany (standardowy) i analizator (en.microsoft) odpowiednio dla "HotelName" i "Description".

{
  "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, "normalizer": standard  },
    { "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", "normalizer": "tagsNormalizer" },
    { "name": "Rating", "type": "Edm.Double", "filterable": true, "sortable": true, "facetable": true },

  ],
  "analyzers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomAnalyzer",
      "name": "tagsAnalyzer",
      "charFilters": [ "html_strip" ],
      "tokenizer": "standard_v2"
    }
  ],
  "normalizers": [
    {
      "@odata.type": "#Microsoft.Azure.Search.CustomNormalizer",
      "name": "tagsNormalizer",
      "tokenFilters": [ "asciifolding", "lowercase" ]
    }
  ]
}  

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

Ta właściwość ustawia algorytm klasyfikacji używany do tworzenia wyniku istotności w wynikach wyszukiwania zapytania wyszukiwania pełnotekstowego. 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 wybrać opcję 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żliwia wykonywanie wszystkich żądań 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 z poświadczeniami dostępu

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: klucze szyfrowania z tożsamością zarządzaną

Możesz uwierzytelnić się w usłudze Azure Key Vault przy użyciu tożsamości zarządzanej przypisanej przez system lub przypisanej przez użytkownika (wersja zapoznawcza). W takim przypadku pomiń poświadczenia dostępu lub ustaw wartość null. W poniższym przykładzie przedstawiono tożsamość zarządzaną przypisaną przez użytkownika. Aby użyć tożsamości zarządzanej przypisanej przez system, pomiń poświadczenia dostępu i tożsamość. Jeśli tożsamość systemowa usługi wyszukiwania ma uprawnienia w usłudze Azure Key Vault, żądanie połączenia powinno zakończyć się powodzeniem.

{
  "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": null,
          "identity" : { 
              "@odata.type": "#Microsoft.Azure.Search.DataUserAssignedIdentity",
              "userAssignedIdentity" : "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]"
          }
    }
} 

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 są wyświetlane wyżej w wynikach wyszukiwania. Profile oceniania składają się z wag pól i funkcji. 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 (interfejs API REST usługi Azure AI Search), 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: Konfiguracje semantyczne

Semantyczna konfiguracja jest częścią definicji indeksu używanej do konfigurowania pól używanych przez semantyczne wyszukiwanie klasyfikacji, podpisów, wyróżniania i odpowiedzi. Aby użyć wyszukiwania semantycznego, należy określić nazwę konfiguracji semantycznej w czasie wykonywania zapytania. Aby uzyskać więcej informacji, zobacz Tworzenie zapytania semantycznego.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "my-semantic-config",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "hotelName"
               },
           "prioritizedContentFields": [
             {
               "fieldName": "description"
             },
             {
               "fieldName": "description_fr"
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "tags"
             },
             {
               "fieldName": "category"
             }
           ]
         }
       }
     ]
   }
}

Definicje

Link Opis
corsOptions Wyświetla listę domen lub źródeł przyznanych indeksowi.
defaultScoringProfile Nazwa niestandardowego profilu oceniania, który zastępuje domyślne zachowania oceniania.
encryptionKey Konfiguruje połączenie z usługą Azure Key Vault na potrzeby szyfrowania zarządzanego przez klienta.
Pola Ustawia definicje i atrybuty pola w indeksie wyszukiwania.
normalizers (normalizacje) Konfiguruje niestandardowy normalizację. Normalizuje kolejność leksykograficzną ciągów, tworząc sortowanie bez uwzględniania wielkości liter, tworzenie aspektów i filtrowanie danych wyjściowych.
Semantyczne Konfiguruje pola używane przez semantyczne wyszukiwanie klasyfikacji, podpisów, wyróżnień i odpowiedzi.
scoringProfiles Służy do dostrajania istotności zapytań pełnotekstowych.
Podobieństwo
sugestory Konfiguruje wewnętrzny magazyn prefiksów pod kątem dopasowywania w zapytaniach częściowych, takich jak autouzupełnianie i sugestie.
vectorSearch Konfiguruje algorytm używany dla pól wektorów.

corsOptions

Język JavaScript po stronie klienta nie może domyślnie wywoływać żadnych interfejsów API, ponieważ przeglądarka uniemożliwia 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.

Atrybut Opis
allowedOrigins Wymagane. Rozdzielana przecinkami lista źródeł, którym udzielono dostępu do indeksu, gdzie każde źródło jest zazwyczaj w postaci protocol://<-qualified-domain-name>:<port> (chociaż <port> jest często pomijany). Oznacza to, że dowolny kod JavaScript obsługiwany z tych źródeł może wysyłać zapytania do indeksu (przy założeniu, że zapewnia prawidłowy klucz interfejsu API). Jeśli chcesz zezwolić na dostęp do wszystkich źródeł, określ * jako pojedynczy element w tablicy "allowedOrigins". Nie jest to zalecane w środowisku produkcyjnym, ale może być przydatne w przypadku programowania lub debugowania.
maxAgeInSeconds Opcjonalny. 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. Wydajność poprawia się, jeśli ta wartość jest większa, ale te zyski są przesunięte o czas wymagany do wprowadzenia zmian zasad CORS. Jeśli nie zostanie ustawiona, zostanie użyty domyślny czas trwania 5 minut.

defaultScoringProfile

Opcjonalny. Ciąg, który jest nazwą niestandardowego profilu oceniania zdefiniowanego w indeksie. Profil domyślny jest wywoływany za każdym razem, gdy profil niestandardowy nie zostanie jawnie określony w ciągu zapytania. Aby uzyskać więcej informacji, zobacz Dodawanie profilów oceniania do indeksu wyszukiwania.

encryptionKey

Konfiguruje połączenie z usługą Azure Key Vault dla dodatkowych kluczy szyfrowania zarządzanych przez klienta (CMK). Dostępne dla rozliczanych usług wyszukiwania utworzonych 1 stycznia 2019 r. lub później.

Połączenie z magazynem kluczy musi zostać uwierzytelnione. W tym celu można użyć tożsamości zarządzanej lub "accessCredentials".

Tożsamości zarządzane mogą być przypisane przez system lub użytkownika (wersja zapoznawcza). Jeśli usługa wyszukiwania ma zarówno tożsamość zarządzaną przypisaną przez system, jak i przypisanie roli, która udziela dostępu do odczytu do magazynu kluczy, możesz pominąć zarówno tożsamość, jak i "accessCredentials", a żądanie zostanie uwierzytelnione przy użyciu tożsamości zarządzanej. Jeśli usługa wyszukiwania ma przypisaną przez użytkownika tożsamość i przypisanie roli, ustaw właściwość "identity" na identyfikator zasobu tej tożsamości.

Atrybut Opis
keyVaultKeyName Wymagane. Nazwa klucza usługi Azure Key Vault używanego do szyfrowania.
keyVaultKeyVersion Wymagane. Wersja klucza usługi Azure Key Vault.
keyVaultUri Wymagane. Identyfikator URI usługi Azure Key Vault (nazywany również nazwą DNS), który udostępnia klucz. Przykładowy identyfikator URI może być https://my-keyvault-name.vault.azure.net
accessCredentials Opcjonalny. Pomiń tę właściwość, jeśli używasz tożsamości zarządzanej. W przeciwnym razie właściwości "accessCredentials" obejmują:
"applicationId" (identyfikator aplikacji usługi Azure Active Directory, który ma uprawnienia dostępu do określonej usługi Azure Key Vault).
"applicationSecret" (klucz uwierzytelniania określonej aplikacji Azure AD).
identity Opcjonalnie, chyba że używasz tożsamości zarządzanej przypisanej przez użytkownika na potrzeby połączenia usługi wyszukiwania z usługą Azure Key Vault. Format to "/subscriptions/[subscription ID]/resourceGroups/[resource group name]/providers/Microsoft.ManagedIdentity/userAssignedIdentities/[managed identity name]".

fields

Zawiera informacje o atrybutach w definicji pola.

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. Złożone pola mogą mieć 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. Collection(Edm.Single) umożliwia dostosowanie wartości zmiennoprzecinkowych o pojedynczej precyzji. Jest ona używana tylko dla pól wektorowych i jest wymagana. Zobacz Obsługiwane typy danych , 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 Artykuł Lookup Document and Add, Update or Delete Documents (Dokument wyszukiwania i dodawanie, aktualizowanie lub usuwanie dokumentów ).
pobieranie Wskazuje, czy pole można zwrócić 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 kluczy i musi być null przeznaczony dla pól złożonych. Ten atrybut można zmienić w istniejących polach. Ustawienie możliwości true pobierania nie powoduje wzrostu wymagań dotyczących magazynu indeksów. Wartość domyślna to true proste pola i null pola złożone.
Przeszukiwania Wskazuje, czy pole można przeszukiwać pełnotekstowo i może być przywoływalne w zapytaniach wyszukiwania. Oznacza to, że przechodzi analizę leksykalizaną , taką jak łamanie wyrazów podczas indeksowania. Jeśli ustawisz pole z możliwością wyszukiwania na wartość podobną do "Sunny day", wewnętrznie jest znormalizowane do poszczególnych tokenów "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 nieciągujących 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 przetwarza zawartość tych pól i organizuje je w pomocniczych strukturach danych na potrzeby wydajnego wyszukiwania. Jeśli chcesz zaoszczędzić miejsce w indeksie i nie musisz uwzględniać pola w wyszukiwaniu, 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. Możliwość filtrowania różni się od 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 żadnych dopasowań, ale $filter=f eq 'Sunny day' będzie. Ten atrybut musi być null przeznaczony dla pól złożonych. Wartość domyślna to true proste pola i null pola złożone. Aby zmniejszyć rozmiar indeksu, ustaw ten atrybut na false 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 chcą sortować według pól w dokumentach. Proste pole można sortować tylko wtedy, gdy jest jednowartościowe (ma jedną wartość w zakresie dokumentu nadrzędnego).

Proste pola kolekcji nie mogą być sortowane, ponieważ są wielowartośćowe. Proste pola podrzędne złożonych kolekcji są również wielowartościowe i dlatego nie można sortować. Jest to prawda, czy jest to bezpośrednie pole nadrzędne, czy pole ancestor, to jest złożona kolekcja. Pola złożone nie mogą być sortowalne, a atrybut sortowania musi być null przeznaczony dla takich pól. Ustawieniem domyślnym dla sortowania są true pola proste z jedną wartością, false dla pól prostych o wielu wartościach i null dla pól złożonych.
facetable 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 megalimetry, 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ć aspektowe. Wartość domyślna dotyczy true wszystkich innych prostych pól. Aby zmniejszyć rozmiar indeksu, ustaw ten atrybut na false w polach, na których nie będzie zestawianie aspektów.
Analizator Ustawia analizator leksykalny na potrzeby tokenizowania ciągów podczas indeksowania i operacji zapytań. Prawidłowe wartości tej właściwości obejmują analizatory języka, wbudowane analizatory i analizatory niestandardowe. Wartość domyślna to standard.lucene. Ten atrybut może być używany tylko z polami z możliwością wyszukiwania i nie można go ustawić razem z elementem searchAnalyzer lub indexAnalyzer. Po wybraniu analizatora i utworzeniu pola w indeksie nie można go zmienić dla pola. Musi być przeznaczona null dla pól złożonych.
searchAnalyzer Ustaw tę właściwość razem z indeksemAnalyzer, 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 wartość i upewnij się, że parametr indexAnalyzer jest ustawiony na dozwoloną wartość. Prawidłowe wartości tej właściwości obejmują wbudowane analizatory i analizatory niestandardowe. Ten atrybut może być używany tylko z polami z możliwością wyszukiwania. Analizator wyszukiwania można zaktualizować w istniejącym polu, ponieważ jest używany tylko w czasie wykonywania zapytań. Musi być przeznaczona null dla pól złożonych.
indexAnalyzer Ustaw tę właściwość razem z funkcją 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 parametr searchAnalyzer jest ustawiony na dozwoloną wartość. Prawidłowe wartości tej właściwości obejmują wbudowane analizatory i analizatory niestandardowe. Ten atrybut może być używany tylko z polami z możliwością wyszukiwania. Po wybraniu analizatora indeksów nie można go zmienić dla pola. Musi być przeznaczona null dla pól złożonych.
Normalizer Ustawia normalizator na potrzeby operacji filtrowania, sortowania i tworzenia aspektów. Może to być nazwa wstępnie zdefiniowanego normalizatora lub niestandardowego normalizatora zdefiniowanego w indeksie. Wartość domyślna to null, która powoduje dokładne dopasowanie tekstu dosłownego, nieanalizowanego. Ten atrybut może być używany tylko z polami Edm.String i Collection(Edm.String) , które mają co najmniej jeden z filtrowalnych, sortowalnych lub facetable ustawionych na wartość true. Normalizacja może być ustawiana tylko w polu po dodaniu do indeksu i nie można jej później zmienić. Musi być przeznaczona null dla pól złożonych. Prawidłowe wartości wstępnie zdefiniowanego normalizatora to:

standard— małe litery tekstu, po którym następuje asciifolding.
lowercase- Przekształca znaki w małe litery.
uppercase - Przekształca znaki w wielkie litery.
asciifolding - Przekształca znaki, które nie są w bloku Basic Latin Unicode odpowiednikiem ASCII, jeśli istnieje. Na przykład zmiana wartości "à" na "a".
elision— Usuwa elision od początku tokenów.
synonimyMapy Lista nazw synonimów map do skojarzenia z tym polem. Ten atrybut może być używany tylko z polami z możliwością wyszukiwania. Obecnie obsługiwana jest tylko jedna mapa synonimów dla każdego pola. Przypisanie mapy synonimów do pola zapewnia, że terminy zapytania przeznaczone dla tego pola są rozszerzane 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 pusty dla prostych pól. Zobacz 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.
Wymiary Liczba całkowita. Wymagane dla pól wektorów. **Musi to być zgodne z rozmiarem osadzania danych wyjściowych modelu osadzania. Na przykład w przypadku popularnego modelu text-embedding-ada-002Usługi Azure OpenAI jego wymiary wyjściowe to 1536, więc byłoby to wymiary ustawione dla tego pola wektorowego. Atrybut wymiarów ma co najmniej 2 i maksymalnie 2048 wartości zmiennoprzecinkowych.
vectorSearchConfiguration Wymagane dla definicji pól wektorów. Określa nazwę konfiguracji algorytmu "vectorSearch" używanego przez pole wektora. Po utworzeniu pola nie można zmienić nazwy vectorSearchConfiguration, ale można zmienić właściwości konfiguracji algorytmu w indeksie. Umożliwia to dostosowanie typu i parametrów algorytmu.

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.

normalizers (normalizacje)

Definiuje niestandardowy normalizację , która ma zdefiniowaną przez użytkownika kombinację filtrów znaków i filtrów tokenów. Po zdefiniowaniu niestandardowego normalizacji w indeksie można określić go według nazwy w definicji pola.

Atrybut Opis
name Wymagane. Pole ciągu określające niestandardowe normalizator zdefiniowane przez użytkownika.
charFilters Używany w niestandardowym normalizatorze. Może to być jeden lub więcej dostępnych filtrów znaków obsługiwanych do użycia w niestandardowym normalizacji:
mapowanie
pattern_replace
tokenFilters Używany w niestandardowym normalizatorze. Może to być co najmniej jeden z dostępnych przechyleń tokenów obsługiwanych do użycia w niestandardowym normalizatorze:
arabic_normalization
asciifolding
cjk_width
elision
german_normalization
hindi_normalization
indic_normalization
persian_normalization scandinavian_normalization
scandinavian_folding
sorani_normalization


małei wielkie litery

scoringProfiles

Profile oceniania mają zastosowanie do wyszukiwania pełnotekstowego. Profil jest definiowany w indeksie i określa logikę niestandardową, która może przyznawać wyższe wyniki wyszukiwania do pasujących dokumentów spełniających kryteria zdefiniowane w profilu. Możesz utworzyć wiele profilów oceniania, a następnie przypisać je do zapytania.

Jeśli tworzysz profil niestandardowy, możesz ustawić go jako domyślny, ustawiając wartość defaultScoringProfile. Aby uzyskać więcej informacji, zobacz Dodawanie profilów oceniania do indeksu wyszukiwania.

Semantyczne

Konfiguracja semantyczna jest częścią definicji indeksu używanej do konfigurowania pól używanych przez semantyczne wyszukiwanie klasyfikacji, podpisów, wyróżnień i odpowiedzi. Konfiguracje semantyczne składają się z pola tytułu, pól z priorytetem zawartości i priorytetowych pól słów kluczowych. Co najmniej jedno pole musi być określone dla każdego z trzech podwłaścicieli (titleField, priorytetoweKeywordsFields i priorytetoweContentFields). Dowolne pole typu Edm.String lub Collection(Edm.String) może być używane jako część konfiguracji semantycznej.

Aby użyć wyszukiwania semantycznego, należy określić nazwę konfiguracji semantycznej w czasie wykonywania zapytania. Aby uzyskać więcej informacji, zobacz Tworzenie zapytania semantycznego.

{
   "name": "hotels",  
   "fields": [ omitted for brevity ],
   "suggesters": [ omitted for brevity ],
   "analyzers": [ omitted for brevity ],
   "semantic": {
     "configurations": [
       {
         "name": "name of the semantic configuration",
         "prioritizedFields": {
           "titleField": {
                 "fieldName": "..."
               },
           "prioritizedContentFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ],
           "prioritizedKeywordsFields": [
             {
               "fieldName": "..."
             },
             {
               "fieldName": "..."
             }
           ]
         }
       }
     ]
   }
}
Atrybut Opis
name Wymagane. Nazwa konfiguracji semantycznej.
pola z priorytetami Wymagane. Opisuje pola tytułu, zawartości i słowa kluczowego, które mają być używane do semantycznego klasyfikowania, podpisów, wyróżnień i odpowiedzi. Należy ustawić co najmniej jedną z trzech podwłaściwości (titleField, priorytizedKeywordsFields i priorytizedContentFields).
priorytetoweFields.titleField Definiuje pole tytułu, które ma być używane do semantycznego klasyfikowania, podpisów, wyróżnień i odpowiedzi. Jeśli nie masz pola tytułu w indeksie, pozostaw to pole puste.
priorytetizedFields.prioritizedContentFields Definiuje pola zawartości, które mają być używane do semantycznego klasyfikowania, podpisów, wyróżnień i odpowiedzi. W celu uzyskania najlepszego wyniku wybrane pola powinny zawierać tekst w postaci języka naturalnego. Kolejność pól w tablicy reprezentuje ich priorytet. Pola o niższym priorytecie mogą zostać obcięte, jeśli zawartość jest długa.
priorytetizedFields.prioritizedKeywordsFields Definiuje pola słów kluczowych, które mają być używane do semantycznego klasyfikowania, podpisów, wyróżniania i odpowiedzi. Aby uzyskać najlepszy wynik, wybrane pola powinny zawierać listę słów kluczowych. Kolejność pól w tablicy reprezentuje ich priorytet. Pola o niższym priorytecie mogą zostać obcięte, jeśli zawartość jest długa.

Podobieństwo

Opcjonalna właściwość, która ma zastosowanie do usług utworzonych przed 15 lipca 2020 r. Dla tych usług można ustawić tę właściwość tak, aby korzystała z algorytmu klasyfikacji BM25 wprowadzonego w lipcu 2020 r. Prawidłowe wartości to "#Microsoft.Azure.Search.ClassicSimilarity" (poprzednia wartość domyślna) lub "#Microsoft.Azure.Search.BM25Similarity".

Dla wszystkich usług utworzonych po lipcu 2020 r. ustawienie tej właściwości nie ma wpływu. Wszystkie nowsze usługi używają BM25 jako jedynego algorytmu klasyfikacji do wyszukiwania pełnotekstowego. Aby uzyskać więcej informacji, zobacz Ranking algorithms in Azure AI Search (Algorytmy klasyfikowania w usłudze Azure AI Search).

sugestory

Określa konstrukcję, która przechowuje prefiksy do dopasowywania w zapytaniach częściowych, takich jak autouzupełnianie i sugestie.

Atrybut Opis
name Wymagane. Nazwa sugestora.
sourceFields Wymagane. Co najmniej jedno pole ciągu, dla którego włączasz autouzupełnianie lub sugerowane wyniki.
searchMode Wymagane i zawsze ustaw wartość analyzingInfixMatching. Określa, że dopasowanie występuje w dowolnym terminie w ciągu zapytania.

vectorSearch

Obiekt vectorSearch umożliwia konfigurację właściwości wyszukiwania wektorowego. Obecnie można skonfigurować tylko konfiguracje algorytmów. Umożliwia to konfigurację parametrów algorytmu i typu algorytmu używanych dla pól wektorów. Można mieć wiele konfiguracji. Nie można modyfikować ani usuwać żadnych konfiguracji, do których odwołuje się pole wektorowe. Wszelkie konfiguracje, do których nie odwołuje się odwołanie, mogą zostać zmodyfikowane lub usunięte. Definicja pola wektorowego (w kolekcji pól) musi określać konfigurację algorytmu wyszukiwania wektorowego (za pośrednictwem vectorSearchConfiguration właściwości), której używa pole.

"vectorSearch": {
    "algorithmConfigurations": [
        {
            "name": "my-vector-config",
            "kind": "hnsw",
            "hnswParameters": {
                "m": 4,
                "efConstruction": 400,
                "efSearch": 500,
                "metric": "cosine"
            }
        }
    ]
}
Atrybut Opis
name Wymagane. Nazwa konfiguracji algorytmu.
Rodzaju Typ algorytmu do użycia. Obsługiwany jest tylko algorytm "hnsw", który jest algorytmem Hierarchiczny nawigowalny small world (HNSW).
hnswParameters Opcjonalny. Parametry dla algorytmu "hnsw". Jeśli ten obiekt zostanie pominięty, są używane wartości domyślne.

hnswParameters

Ten obiekt zawiera dostosowania parametrów hnsw algorytmu. Wszystkie właściwości są opcjonalne, a wartości domyślne są używane, jeśli zostaną pominięte.

Atrybut Opis
Metryka Ciąg. Metryka podobieństwa do użycia na potrzeby porównań wektorów. W przypadku hnswparametrów dozwolone wartości to "cosine", "euclidean" i "dotProduct". Wartość domyślna to "cosinus".
m Liczba całkowita. Liczba łączy dwukierunkowych utworzonych dla każdego nowego elementu podczas budowy. Wartość domyślna to 4. Dozwolony zakres wynosi od 4 do 10. Większe wartości prowadzą do gęstszych grafów, zwiększając wydajność zapytań, ale wymagają większej ilości pamięci i obliczeń.
efConstruction Liczba całkowita. Rozmiar listy dynamicznej najbliższych sąsiadów używanych podczas indeksowania. Wartość domyślna to 400. Dozwolony zakres to od 100 do 1000.Większe wartości prowadzą do lepszej jakości indeksu, ale wymagają większej ilości pamięci i obliczeń.
efSearch Liczba całkowita. Rozmiar listy dynamicznej zawierającej najbliższych sąsiadów, który jest używany w czasie wyszukiwania. Wartość domyślna to 500. Dozwolony zakres to od 100 do 1000. Zwiększenie tego parametru może poprawić wyniki wyszukiwania, ale zmniejsza wydajność zapytań.

Ponieważ efSearch jest parametrem czasu zapytania, tę wartość można zaktualizować nawet wtedy, gdy istniejące pole korzysta z konfiguracji algorytmu.

Zobacz też