Tworzenie lub aktualizowanie indeksu (interfejs API REST w wersji zapoznawczej)
Dotyczy: 2023-07-01-Preview. Ta wersja nie jest już obsługiwana. Uaktualnij natychmiast do nowszej wersji.
Ważny
2023-07-01-Preview dodaje wyszukiwanie wektorów.
- obiekt "vectorSearch" — konfiguracja ustawień wyszukiwania wektorowego. Dotyczy tylko algorytmów wyszukiwania wektorowego.
- "Collection(Edm.Single)" typ danych wymagany dla pola wektorowego. Reprezentuje liczbę zmiennoprzecinkową o pojedynczej precyzji jako typ pierwotny.
- właściwość wymiarów wymagana dla pola wektorowego. Reprezentuje wymiarowość osadzonych wektorów.
- właściwość "vectorSearchConfiguration" wymagana dla pola wektorowego. Wybiera konfigurację algorytmu dla tego pola.
2021-04-30-Preview dodaje:
- "semanticConfiguration" używane do określania zakresu klasyfikacji semantycznej dla określonych pól.
- "tożsamość"w obszarze "encryptionKey", używane do pobierania klucza szyfrowania zarządzanego przez klienta z usługi 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 sortowaniach 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 funkcji 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 on zaktualizowany 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 Dodawanie, aktualizowanie lub usuwanie dokumentów. Maksymalna liczba indeksów, które można utworzyć, różni się w zależności od warstwy cenowej. W każdym indeksie istnieją ograniczenia dotyczące poszczególnych elementów. Aby uzyskać więcej informacji, zobacz Service limits for 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ą funkcji PUT.
Ponieważ istniejący indeks zawiera zawartość, wiele modyfikacji indeksu wymaga spadku indeksu i ponownego kompilowania. Następujące zmiany schematu są wyjątkiem od tej reguły:
Dodawanie nowych pól
Zmienianie opcji mechanizmu CORS
Zmiana istniejących pól przy użyciu dowolnej z następujących trzech modyfikacji:
- Pokaż lub ukryj pola (
retrievable
: true | false) - Zmienianie analizatora używanego w czasie zapytania (
searchAnalyzer
) - Dodawanie lub edytowanie synonimuMap używanego w czasie zapytania (
synonymMaps
)
- Pokaż lub ukryj pola (
Aby wprowadzić dowolne z powyższych zmian schematu w istniejącym indeksie, określ nazwę indeksu w identyfikatorze 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. Dodatkowe miejsce do magazynowania nie jest używane do momentu wystąpienia jednej z dwóch rzeczy: dla nowego pola (przy użyciu scalania) lub dodawane są nowe dokumenty.
aktualizacje suggester
mają podobne ograniczenia: nowe pola można dodawać do suggester
w tym samym czasie, ale istniejące pola nie mogą być usuwane ani dodawane do suggesters
bez ponownego kompilowania indeksu.
Aktualizacje analizatora, tokenizatora, filtru tokenu lub filtru char nie są dozwolone. Nowe można utworzyć 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 powoduje przełączenie indeksu w tryb offline przez co najmniej kilka sekund, co oznacza, że indeksowanie i żądania zapytań kończą się niepowodzeniem, dopóki indeks nie wróci do trybu 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 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. Kreski nie mogą być kolejne. |
wersja interfejsu API | Wymagane. Aby uzyskać więcej wersji, zobacz wersje interfejsu API. |
allowIndexDowntime | Fakultatywny. Wartość false domyślnie. 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 przełączony w tryb 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 |
---|---|
Typ zawartości | Wymagane. Ustaw tę wartość na application/json |
api-key | Opcjonalnie, jeśli używasz ról platformy Azure i 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ć nagłówek api-key ustawiony na klucz administratora (w przeciwieństwie do klucza zapytania). Aby uzyskać szczegółowe informacje, zobacz Connect to Azure AI Search using key authentication (Łączenie z usługą Azure AI Search przy użyciu uwierzytelniania kluczy). |
Treść żądania
Treść żądania zawiera definicję schematu, która zawiera listę pól danych w dokumentach, które są wprowadzane 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 jest typu 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 wektorowe 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łasność | Opis |
---|---|
nazwa | 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. |
opis | Opcjonalny opis. |
pól | Kolekcja pól dla tego indeksu, w której każde pole ma nazwę, obsługiwany typ danych, który jest 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 "kluczem" ustawionym na wartość "true". To pole reprezentuje unikatowy identyfikator, czasami nazywany identyfikatorem dokumentu, dla każdego dokumentu przechowywanego z indeksem. Kolekcja pól akceptuje teraz pola wektorowe. |
podobieństwo | Fakultatywny. W przypadku usług utworzonych przed 15 lipca 2020 r. ustaw tę właściwość na opcję algorytmu klasyfikacji BM25. |
sugestorzy | Określa konstrukcję, która przechowuje prefiksy do dopasowywania w zapytaniach częściowych, takich jak autouzupełnianie i sugestie. |
scoringProfiles | Fakultatywny. Służy do dostrajania istotności w przypadku zapytań pełnotekstowych. |
semantyczne | Fakultatywny. Definiuje parametry indeksu wyszukiwania mającego wpływ na możliwości wyszukiwania semantycznego. W przypadku zapytań semantycznych wymagana jest konfiguracja semantyczna. Aby uzyskać więcej informacji, zobacz Tworzenie semantycznego zapytania. |
vectorSearch | Fakultatywny. Konfiguruje różne ustawienia wyszukiwania wektorów. Można skonfigurować tylko algorytmy wyszukiwania wektorowego. |
normalizacji | Fakultatywny. Normalizuje kolejność leksykograficzną ciągów, generując dane wyjściowe bez uwzględniania wielkości liter. |
analizatory, charFilters, tokenizery, tokenFilters | Fakultatywny. 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 | Fakultatywny. Służy do obsługi zapytań między źródłami w indeksie. |
encryptionKey | Fakultatywny. 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. |
Odpowiedź
W przypadku pomyślnego utworzenia żądania 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=minimal, treść odpowiedzi jest pusta, a kod stanu powodzenia to "204 Brak zawartości" zamiast "Utworzono 201". 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. Jeśli jednak nagłówek żądania Prefer
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 tym dokumencie. Parametr "algorithmConfiguration" jest ustawiony na nazwę konfiguracji "vectorSearch" w indeksie. Można zdefiniować wiele w indeksie, a następnie określić jedno 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 wektorowych. Podobnie jeśli ustawisz właściwości tylko wektorowe, takie jak "dimensions" lub "vectorSearchConfiguration" na 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żyć 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
Sugerowanie definicji powinno określać pola ciągu "z możliwością wyszukiwania" i "pobieranie" (w interfejsach API REST wszystkie proste pola są domyślnie "retrievable": true
). 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
Analyzers i normalizers 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 "normalizers".
W poniższym przykładzie przedstawiono niestandardowe analizatory i normalizacje dla tagów. Demonstruje również wstępnie zdefiniowany normalizator (standardowy) i analizator (en.microsoft) dla "HotelName" i "Description", odpowiednio.
{
"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 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ż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 atrybut corsOptions
. 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ę pomyślnie.
{
"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 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 (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óżnień i odpowiedzi. Aby użyć wyszukiwania semantycznego, należy określić nazwę konfiguracji semantycznej w czasie zapytania. Aby uzyskać więcej informacji, zobacz Tworzenie semantycznego zapytania.
{
"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
Łącze | Opis |
---|---|
corsOptions | Wyświetla listę domen lub źródeł, które zostały przyznane 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. |
pól | Ustawia definicje i atrybuty pola w indeksie wyszukiwania. |
normalizacji | Konfiguruje niestandardowy normalizator. 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 w przypadku zapytań pełnotekstowych. |
podobieństwo | |
sugestorzy | Konfiguruje wewnętrzny magazyn prefiksów pod kątem dopasowywania zapytań częściowych, takich jak autouzupełnianie i sugestie. |
vectorSearch | Konfiguruje algorytm używany dla pól wektorowych. |
corsOptions
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), 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://<w pełni kwalifikowanej nazwy domeny>:<port> (chociaż <port> jest często pomijany). Oznacza to, że każdy kod JavaScript obsługiwany z tych źródeł może wysyłać zapytania do indeksu (zakładając, ż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 | Fakultatywny. 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. 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
Fakultatywny. 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 jest 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 na potrzeby dodatkowych kluczy szyfrowania zarządzanych przez klienta (CMK). Dostępne dla rozliczanych usług wyszukiwania utworzonych 1 stycznia 2019 r. lub później.
Należy uwierzytelnić połączenie z magazynem kluczy. W tym celu można użyć opcji "accessCredentials" lub tożsamości zarządzanej.
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óre przyznaje dostęp do odczytu do magazynu kluczy, możesz pominąć zarówno tożsamość, jak i "accessCredentials", a żądanie będzie uwierzytelniane 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 | Fakultatywny. 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 z uprawnieniami dostępu do określonej usługi Azure Key Vault). "applicationSecret" (klucz uwierzytelniania określonej aplikacji usługi Azure AD). |
tożsamość | 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]" . |
Pola
Zawiera informacje o atrybutach definicji pola.
Atrybut | Opis |
---|---|
nazwa | 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 dla tekstu lub Edm.Int32 dla liczb całkowitych.
pola złożone mogą mieć pola podrzędne, które 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) uwzględnia wartości zmiennoprzecinkowe o pojedynczej precyzji. Jest ona używana tylko dla pól wektorowych i jest wymagana. Aby uzyskać pełną listę obsługiwanych typów danych, zobacz Obsługiwane typy danych. |
klucz | Wymagane. Ustaw ten atrybut na wartość true, aby wyznaczyć wartości pola unikatowo identyfikujące 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 to false dla prostych pól i null dla pól złożonych.
Pola klucza 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 dokumentów wyszukiwania i dodawanie, aktualizowanie lub usuwanie dokumentów. |
pobieranie | Wskazuje, czy pole może zostać zwrócone w wynikach wyszukiwania. Ustaw ten atrybut na false , 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 dla pól kluczy i musi być null dla pól złożonych. Ten atrybut można zmienić w istniejących polach. Ustawienie możliwości pobierania na true nie powoduje zwiększenia wymagań dotyczących magazynu indeksów. Wartość domyślna to true dla prostych pól i null dla pól złożonych. |
Przeszukiwania | Wskazuje, czy pole jest wyszukiwaniem pełnotekstowym i może być przywoływalne w zapytaniach wyszukiwania. Oznacza to, że przechodzi analizy leksykalnej, takich jak łamanie wyrazów podczas indeksowania. Jeśli ustawisz pole z możliwością wyszukiwania na wartość podobną do "Słoneczny dzień", 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) można wyszukiwać domyślnie. Ten atrybut musi być false dla prostych pól innych typów danych nieciągujących i musi być null 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 opcję wyszukiwania na 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 zapytaniach $filter . 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, dlatego 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' . Ten atrybut musi być null dla pól złożonych. Wartość domyślna to true dla prostych pól i null dla pól złożonych. 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 wyrażeniach $orderby . Domyślnie usługa Azure AI Search sortuje wyniki według wyniku, 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 pojedynczą 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ć. Dotyczy to zarówno natychmiastowego pola nadrzędnego, jak i pola przodka, czyli kolekcji złożonej. Nie można sortować złożonych pól, a atrybut sortowalny musi być null dla takich pól. Wartością domyślną sortowania jest true dla pól prostych z jedną wartością, false dla pól prostych z wieloma wartościami i null dla pól złożonych. |
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 aparatów cyfrowych i wyświetlanie trafień według marki, megapikseli, ceny itd.). Ten atrybut musi być null dla pól złożonych. Pola typu Edm.GeographyPoint lub Collection(Edm.GeographyPoint) nie mogą być aspektami. Wartość domyślna to true dla wszystkich innych prostych pól. Aby zmniejszyć rozmiar indeksu, ustaw ten atrybut na false w polach, na których nie będziesz stosować aspektów. |
Analizator | Ustawia analizator leksykalny na potrzeby tokenizowania ciągów podczas indeksowania i wykonywania operacji zapytań. Prawidłowe wartości tej właściwości obejmują analizatory języka , wbudowanych analizatorówi analizatorów niestandardowych. 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ć null dla pól złożonych. |
searchAnalyzer | Ustaw tę właściwość razem 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 . 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ć 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 właściwość searchAnalyzer jest ustawiona 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 indeksu nie można go zmienić dla pola. Musi być 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 , co skutkuje dokładnym dopasowaniem dosłownego, nieanalizowanego tekstu. 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 zestawów regułowych na wartość true. Normalizator można ustawić tylko w polu po dodaniu do indeksu i nie można go później zmienić. Musi być null dla pól złożonych. Prawidłowe wartości wstępnie zdefiniowanego normalizatora obejmują: standard — małe litery tekstu, po którym następuje tworzenie asciifoldingu.
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 map synonimów 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 na pole. Przypisanie mapy synonimów do pola zapewnia, że terminy zapytania przeznaczone dla tego pola są rozszerzane w czasie wykonywania zapytań przy użyciu reguł w mapie synonimów. Ten atrybut można zmienić w istniejących polach. Musi być null lub pusta kolekcja dla pól złożonych. |
Pola | Lista pól podrzędnych, jeśli jest to pole typu Edm.ComplexType lub Collection(Edm.ComplexType) . Musi być null lub puste dla prostych pól. Zobacz Jak modelować złożone typy danych w usłudze Azure AI Search, aby uzyskać więcej informacji na temat sposobu i kiedy używać pól podrzędnych. |
Wymiary | Liczba całkowita. Wymagane dla pól wektorowych. **Musi to być zgodne z rozmiarem osadzania danych wyjściowych modelu osadzania. Na przykład w przypadku popularnego modelu usługi Azure OpenAI text-embedding-ada-002 jego wymiary wyjściowe to 1536, więc będzie to wymiar ustawiony dla tego pola wektorowego. Atrybut wymiarów ma co najmniej 2 i maksymalnie 2048 wartości zmiennoprzecinkowych każdy. |
vectorSearchConfiguration | Wymagane dla definicji pól wektorowych. Określa nazwę konfiguracji algorytmu "vectorSearch" używane 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. |
Nuta
Pola typu Edm.String
, które można filtrować, sortować lub aspektowe, mogą mieć długość co najwyżej 32 kilobajtów. Wynika to z faktu, ż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, aby 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 zapytania.
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 znormalizowany, który ma zdefiniowaną przez użytkownika kombinację filtrów znaków i filtrów tokenów. Po zdefiniowaniu niestandardowego normalizatora w indeksie można określić go według nazwy w definicji pola .
Atrybut | Opis |
---|---|
nazwa | Wymagane. Pole ciągu określające niestandardowy normalizator zdefiniowany 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 normalizatorze: mapowanie pattern_replace |
tokenFilters | Używany w niestandardowym normalizatorze. Może to być co najmniej jeden z dostępnych przechyleń tokenów obsługiwany 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łe litery wielkie |
scoringProfiles
Profile oceniania mają zastosowanie do wyszukiwania pełnotekstowego. Profil jest definiowany w indeksie i określa logikę niestandardową, która może przyznać 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 defaultScoringProfile
. Aby uzyskać więcej informacji, zobacz Dodawanie profilów oceniania do indeksu wyszukiwania.
semantyczny
Semantyczna konfiguracja 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ściwości (titleField, priorytetoweKeywordsFields i priorytetoweContentFields). Dowolne pole typu Edm.String
lub Collection(Edm.String)
może być używane w ramach konfiguracji semantycznej.
Aby użyć wyszukiwania semantycznego, należy określić nazwę konfiguracji semantycznej w czasie zapytania. Aby uzyskać więcej informacji, zobacz Tworzenie semantycznego zapytania.
{
"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 |
---|---|
nazwa | Wymagane. Nazwa konfiguracji semantycznej. |
pola priorytetowe | Wymagane. Opisuje pola tytułów, zawartości i słów kluczowych, 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, priorytetizedKeywordsFields i priorytetizedContentFields). |
priorytetoweFields.titleField | Definiuje pole tytułu, które ma być używane do semantycznego klasyfikowania, podpisów, wyróżniania 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óżniania i odpowiedzi. W celu uzyskania najlepszego wyniku wybrane pola powinny zawierać tekst w formularzu 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ść, aby użyć algorytmu klasyfikacji BM25 wprowadzonego w lipcu 2020 roku. Prawidłowe wartości obejmują "#Microsoft.Azure.Search.ClassicSimilarity"
(poprzednie ustawienie domyślne) 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.
sugestorzy
Określa konstrukcję, która przechowuje prefiksy do dopasowywania w zapytaniach częściowych, takich jak autouzupełnianie i sugestie.
Atrybut | Opis |
---|---|
nazwa | 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 ustawione na wartość analyzingInfixMatching . Określa, że dopasowanie ma miejsce 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ę typu algorytmu i parametrów algorytmu używanych dla pól wektorowych. 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ą być modyfikowane lub usuwane. Definicja pola wektorowego (w kolekcji pól) musi określać konfigurację algorytmu wyszukiwania wektorów (za pośrednictwem właściwości vectorSearchConfiguration
), której używa pole.
"vectorSearch": {
"algorithmConfigurations": [
{
"name": "my-vector-config",
"kind": "hnsw",
"hnswParameters": {
"m": 4,
"efConstruction": 400,
"efSearch": 500,
"metric": "cosine"
}
}
]
}
Atrybut | Opis |
---|---|
nazwa | Wymagane. Nazwa konfiguracji algorytmu. |
rodzaj | Typ algorytmu do użycia. Obsługiwane są tylko algorytmy "hnsw", czyli algorytm hierarchiczny Navigable Small World (HNSW). |
hnswParameters | Fakultatywny. Parametry algorytmu "hnsw". Jeśli ten obiekt zostanie pominięty, zostaną użyte wartości domyślne. |
hnswParameters
Ten obiekt zawiera dostosowania parametrów algorytmu hnsw
. Wszystkie właściwości są opcjonalne, a wartości domyślne są używane, jeśli zostaną pominięte.
Atrybut | Opis |
---|---|
metryka | Struna. Metryka podobieństwa do użycia na potrzeby porównań wektorów. W przypadku hnsw dozwolone wartości to "cosine", "euclidean" i "dotProduct". Wartość domyślna to "cosinus". |
m | Liczba całkowita. Liczba linków dwukierunkowych utworzonych dla każdego nowego elementu podczas budowy. Wartość domyślna to 4. Dozwolony zakres to od 4 do 10. Większe wartości prowadzą do gęstszych grafów, poprawy wydajności 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 spowalnia wydajność zapytań. |
Ponieważ efSearch
jest parametrem czasu zapytania, tę wartość można zaktualizować, nawet jeśli istniejące pole korzysta z konfiguracji algorytmu.
Zobacz też
- kodów stanu HTTP
- Dodawanie profilów oceniania do indeksu wyszukiwania
- interfejs API wyszukiwania dokumentów
- Obsługiwane typy danych
- analizatory leksykalne
- Tworzenie indeksu usługi Azure AI Search w portalu
- Tworzenie konfiguracji semantycznej