Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważna
Ta funkcja jest dostępna w wersji beta. Administratorzy obszaru roboczego mogą kontrolować dostęp do tej funkcji ze strony Podglądy . Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.
Indeks wyszukiwania pełnotekstowego przyspiesza przeszukiwanie jednej lub większej liczby kolumn tekstowych w zarządzanej tabeli Delta Lake lub Iceberg. Indeks obsługuje dopasowywanie podciągów i dopasowywanie wyrazów. Podczas wykonywania zapytań do tabeli za pomocą funkcji search lub isearch platforma Azure Databricks używa indeksu do pomijania plików, co do których ma pewność, że nie zawierają pasujących wierszy. Znacznie zmniejsza to ilość skanowanych danych, szczególnie w przypadku wyszukiwania selektywnego.
Ważna
Indeksy utworzone w wersji beta nie mają gwarancji, że będą zgodne z nowszymi wersjami. Gdy funkcja osiągnie publiczną wersję zapoznawcza, należy usunąć istniejące indeksy i utworzyć nowe.
Requirements
Indeksy wyszukiwania pełnotekstowego mają wymagania dotyczące uprawnień obliczeniowych, podstawowych tabel i schematów oraz konfiguracji tabeli podstawowej.
Compute
Indeksy wyszukiwania pełnotekstowego są dostępne tylko w środowisku uruchomieniowym Azure Databricks w wersji 18.2 lub nowszej. Należy włączyć tę funkcję beta w ustawieniach obszaru roboczego. Zobacz Zarządzanie wersjami zapoznawczami usługi Azure Databricks.
Permissions
Aby utworzyć indeks wyszukiwania:
- Musisz mieć
MODIFYuprawnienie do tabeli, do której odwołuje się indeks wyszukiwania. - Musisz mieć uprawnienia
CREATE TABLEdo schematu nadrzędnego. Właściciel schematu lub użytkownik z uprawnieniem MANAGE może przyznać ci uprawnieniaCREATE TABLEdo schematu.
Konfiguracja tabeli
Przed utworzeniem indeksu wyszukiwania pełnotekstowego tabela podstawowa musi spełniać wszystkie następujące elementy:
- Indeks należy utworzyć w tym samym wykazie i schemacie co tabela podstawowa.
- Tabela jest tabelą zarządzaną Delta Lake lub tabelą zarządzaną Iceberg.
- Śledzenie wierszy jest włączone (
delta.enableRowTracking = true). Zobacz Śledzenie wierszy w Azure Databricks. - Indeksowane kolumny mają typ
STRING,VARIANT,STRUCTlubARRAY.STRINGkolumny korzystają z sortowaniaUTF8_BINARY. - Kolumna
STRUCTzawiera co najmniej jednoSTRINGpole ,VARIANTlubARRAYliścia w dowolnej głębokości zagnieżdżenia; inne pola liścia są ignorowane. - W tabeli nie są używane żadne funkcje z listy ograniczeń, w tym: OpenSharing, płytkie klonowanie, mechanizmy kontroli dostępu oparte na atrybutach, zasady zabezpieczeń na poziomie wiersza i maski kolumn. Zobacz Ograniczenia.
Informacje o wymaganiach dotyczących protokołów tabel, które obowiązują zarówno w przypadku tabel Delta Lake, jak i Iceberg, można znaleźć w artykule Zgodność funkcji i protokoły Delta Lake.
Tworzenie indeksu wyszukiwania pełnotekstowego
Można utworzyć maksymalnie cztery indeksy w jednej tabeli, z których każda jest w innej kolumnie.
Użyj CREATE SEARCH INDEX, aby utworzyć indeks dla jednej lub większej liczby kolumn tekstowych. Poniższy przykład indeksuje dwie kolumny tekstowe istniejącej tabeli logów:
CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);
Pełna składnia to:
CREATE SEARCH INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name [, column_name ...] )
[OPTIONS ( option_key = option_value [, ... ] )]
index_name musi być unikatowa w schemacie i nie może być zgodna z istniejącą nazwą tabeli.
Aby kontrolować sposób tokenizacji tekstu, zobacz Opcje.
Ostrzeżenie
Jeśli CREATE SEARCH INDEX i REFRESH INDEX ulegną awarii w trakcie wykonywania, uruchom REFRESH INDEX, aby odzyskać sprawność po częściowym niepowodzeniu.
Opcje
Klauzula OPTIONS akceptuje następujące klucze:
| Key | Wartości | Domyślny | Description |
|---|---|---|---|
tokenizer |
ngram, split |
ngram |
Jak tekst jest tokenizowany na potrzeby indeksowania. Zobacz Wybierz tokenizator do swojego zastosowania. |
ngram_size |
Liczba całkowita w [3, 10] |
5 |
Długość produkowanego n-grama. Prawidłowe tylko wtedy, gdy tokenizer = 'ngram'. |
min_token_length |
Liczba całkowita >= 1 |
3 |
Minimalna długość tokenów do zachowania. Tokeny krótsze niż te są porzucane podczas indeksowania. Prawidłowe tylko wtedy, gdy tokenizer = 'split'. |
Aby uzyskać szczegółowe informacje o błędach dotyczących nieprawidłowych opcji, zobacz stan błędu SEARCH_INDEX_INVALID_PARAMETERS.
Wybierz tokenizator odpowiedni do swojego zastosowania
Indeksy wyszukiwania mają dostępne 2 opcje tokenizatora w zależności od przypadku użycia:
| narzędzie do tokenizacji | Przypadek użycia | Description |
|---|---|---|
ngram |
Dopasowywanie podciągów. | Dzieli tekst na nakładające się n-gramy długości ngram_size. |
split |
Sprawdzanie zawierania całych wyrazów. | Dzieli tekst na tokeny wyrazów. Token to ciąg liter Unicode (\p{L}) i znaków łączących (\p{M}); każdy inny znak jest separatorem. |
Aby utworzyć indeks n-gram o rozmiarze 4:
CREATE SEARCH INDEX log_ngram_idx
ON logs (message)
OPTIONS (tokenizer = 'ngram', ngram_size = 4);
Aby utworzyć split indeks o minimalnej długości tokenu wynoszącej 2:
CREATE SEARCH INDEX log_word_idx
ON logs (message)
OPTIONS (tokenizer = 'split', min_token_length = 2);
Wykonywanie zapytań do danych przy użyciu search i isearch
Azure Databricks ma dwie funkcje SQL do testowania, czy wzorzec wyszukiwania znajduje się w co najmniej jednym miejscu docelowym tekstu:
-
search: Uwzględniana jest wielkość liter. -
isearch: Bez uwzględniania wielkości liter.
Wybierz search lub isearch w zależności od wymagań dotyczących rozróżniania wielkości liter. Gdy indeksowane kolumny są uwzględnione w indeksie wyszukiwania pełnotekstowego, usługa Azure Databricks używa tego indeksu do pomijania plików, o których wiadomo, że nie zawierają pasujących wierszy. Indeksy wyszukiwania nie mają wpływu na wyniki.
Indeksy przyspieszają zapytania najbardziej, gdy wzorzec wyszukiwania pojawia się w niewielkim ułamku plików tabeli.
search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
Argumenty
search i isearch zaakceptuj następujące argumenty:
-
targetmusi być typuSTRING, ,VARIANTSTRUCTlubARRAY, tego samego typu, na które zezwala indeksowanie. Duplikaty obiektów docelowych są usuwane. -
patternmusi być literałem ciągu innego niż null. -
modeokreśla, jakpatternpasuje do każdegotargetelementu :-
substring(wartość domyślna):patternjest dopasowywane jako podciąg w każdymtarget. -
word:patternjest dzielony na tokeny słów zgodnie z tą samą regułą co tokenizatorsplit. Funkcja zwraca wartość true, jeśli każde słowo w obiekciepatternjest wyświetlane w co najmniej jednym obiekcie docelowym, niezależnie od kolejności. Zobacz Wybierz tokenizator do swojego zastosowania.
-
Zwroty
search i isearch zwracają wartość BOOLEAN zgodnie z logiką trójwartościową:
-
truejeśli pasuje co najmniej jeden obiekt docelowy, który nie jest nullem. -
nulljeśli nie ma wartości docelowej innej niż null, ale co najmniej jeden element docelowy tonull. -
falsejeśli wszystkie obiekty docelowe mają wartość inną niż null, a żadna z nich nie jest zgodna.
Examples
Poniższe przykłady przedstawiają typowe zapytania search i isearch:
-- Case-insensitive substring search across one column.
SELECT * FROM logs
WHERE isearch(message, 'connection refused');
-- Case-sensitive substring search across multiple columns.
SELECT * FROM logs
WHERE search(message, error_detail, '550e8400-e29b-41d4-a716-446655440000');
-- Word search: matches rows containing all three words, in any order.
SELECT * FROM audit_logs
WHERE search(message, 'user admin login', mode => 'word');
Zarządzanie indeksami
Ważna
Indeksy wyszukiwania pełnotekstowego nie są aktualizowane automatycznie po zmianie tabeli podstawowej. Zobacz Odświeżanie indeksu.
Azure Databricks zachowuje poprawność zapytań, niezależnie od aktualności indeksu. Gdy tabela zawiera dane nieindeksowane, zapytanie używa istniejącego indeksu do przyspieszenia dostępu do indeksowanych rekordów i używa skanowania tabeli dla nieindeksowanych rekordów.
Użyj następujących operacji, aby zarządzać indeksami wyszukiwania pełnotekstowego:
Opisywanie lub wyświetlanie indeksu
Aby wyświetlić informacje o indeksie:
DESCRIBE INDEX log_idx;
Odświeżanie indeksu
Indeksy wyszukiwania pełnotekstowego nie są aktualizowane automatycznie po zmianie tabeli podstawowej.
Aby zaktualizować indeks, dodaj wpisy dla nowych wierszy:
REFRESH INDEX log_idx;
REFRESH INDEX jest operacją przyrostową, tylko do dołączania. Indeksuje nowe dane, ale nie usuwa wpisów dla usuniętych wierszy.
Aby zaktualizować indeks, dodaj wpisy dla nowych wierszy i usuń wpisy dla usuniętych wierszy, użyj polecenia REFRESH INDEX ... FULL:
REFRESH INDEX log_idx FULL;
Pełne odświeżanie wymaga więcej zasobów obliczeniowych niż odświeżanie przyrostowe. W miarę upływu czasu odświeżanie przyrostowe gromadzi nieaktualne wpisy, co zwiększa rozmiar indeksu i negatywnie wpływa na wydajność.
Usuń indeks
Aby usunąć indeks, uruchom następujące polecenie:
DROP INDEX log_idx;
Aby uniknąć błędu z powodu brakujących indeksów, użyj:
DROP INDEX IF EXISTS log_idx;
Note
Jeśli porzucasz tabelę podstawową, polecenie również porzuca indeksy wyszukiwania pełnotekstowego.
Ograniczenia
Indeksy wyszukiwania pełnotekstowego mają następujące ograniczenia:
- Zmiana nazwy indeksowanej kolumny w tabeli podstawowej lub zmiana jej typu danych nie jest obsługiwana.
- Tabele z funkcją OpenSharing nie są obsługiwane. Jeśli po utworzeniu indeksu dodasz tabelę podstawową jako źródło lub element docelowy openSharing, Azure Databricks zignoruje indeks wyszukiwania.
- Tabele z płytkimi klonami nie są obsługiwane. Jeśli dodasz tabelę bazową jako płytkie źródło klonowania po utworzeniu indeksu, Azure Databricks zignoruje indeks wyszukiwania.
- Tabele z kontrolami dostępu opartymi na atrybutach, maskami kolumn lub zasadami zabezpieczeń na poziomie wiersza nie są obsługiwane. Jeśli dodasz dowolne z tych kontrolek do tabeli z indeksem wyszukiwania, Azure Databricks zignoruje indeks wyszukiwania. Zobacz Podstawowe pojęcia dotyczące kontroli dostępu opartej na atrybutach (ABAC).