Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Den här funktionen finns i Beta. Arbetsyteadministratörer kan styra åtkomsten till den här funktionen från sidan Förhandsversioner . Se Hantera förhandsversioner av Azure Databricks.
Ett fulltextsökningsindex påskyndar sökningar på en eller flera textkolumner i en hanterad Delta Lake- eller Iceberg-tabell. Indexet stöder delsträngsmatchning och ordmatchning. När du frågar tabellen med funktionerna search eller isearch använder Azure Databricks indexet för att hoppa över filer som garanterat inte innehåller matchande rader. Detta minskar avsevärt mängden data som genomsöks, särskilt för selektiva sökningar.
Viktigt!
Index som skapades under betaversionen är inte garanterade att vara kompatibla med senare versioner. När funktionen når den offentliga förhandsversionen måste du släppa befintliga index och skapa nya.
Requirements
Fulltextsökningsindex har krav för beräknings-, bastabell- och schemabehörigheter samt bastabellkonfiguration.
Compute
Fulltextsökningsindex är endast tillgängliga i Azure Databricks Runtime 18.2 och senare, och du måste aktivera den här Beta-funktionen i dina arbetsyteinställningar. Se Hantera förhandsversioner av Azure Databricks.
Permissions
Så här skapar du ett sökindex:
- Du måste ha behörigheten
MODIFYför tabellen som refereras till i sökindexet. - Du måste ha behörigheten
CREATE TABLEför det överordnade schemat. En schemaägare eller användare med behörigheten HANTERA kan ge digCREATE TABLEbehörigheter i schemat.
Tabellkonfiguration
Innan du skapar ett fulltextsökningsindex måste bastabellen uppfylla följande:
- Du måste skapa indexet i samma katalog och schema som bastabellen.
- Tabellen är en hanterad Delta Lake-tabell eller en hanterad Iceberg-tabell.
- Radspårning är aktiverat (
delta.enableRowTracking = true). Se Radspårning i Azure Databricks. - Indexerade kolumner är av typen
STRING,VARIANT,STRUCTellerARRAY.STRINGkolumner använderUTF8_BINARYsorteringen. - En
STRUCT-kolumn innehåller minst ett lövfält av typenSTRING,VARIANTellerARRAYpå valfri kapslingsnivå; andra lövfält ignoreras. - Tabellen använder inte några funktioner från listan över begränsningar, inklusive: OpenSharing, ytlig kloning, attributbaserade åtkomstkontroller, säkerhetsprinciper på radnivå och kolumnmasker. Se Begränsningar.
Information om tabellprotokollkrav som gäller för både Delta Lake- och Iceberg-tabeller finns i Delta Lake-funktionskompatibilitet och protokoll.
Skapa ett fulltextsökningsindex
Du kan skapa upp till fyra index i en enda tabell, var och en i en annan kolumn.
Använd CREATE SEARCH INDEX för att skapa ett index över en eller flera textkolumner. I följande exempel indexeras två textkolumner i en befintlig loggtabell:
CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);
Den fullständiga syntaxen är:
CREATE SEARCH INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name [, column_name ...] )
[OPTIONS ( option_key = option_value [, ... ] )]
index_name måste vara unikt i schemat och kan inte matcha ett befintligt tabellnamn.
Information om hur texten tokeniseras finns i Alternativ.
Varning
Om CREATE SEARCH INDEX och REFRESH INDEX misslyckas mitt i körningen kör du REFRESH INDEX för att återställa från ett partiellt fel.
Alternativ
Satsen OPTIONS accepterar följande nycklar:
| Key | Värden | Standardinställning | Description |
|---|---|---|---|
tokenizer |
ngram, split |
ngram |
Hur texten tokeniseras för indexering. Se Välj en tokenizer för ditt användningsfall. |
ngram_size |
heltal i [3, 10] |
5 |
Längden på de n-gram som genereras. Endast giltigt när tokenizer = 'ngram'. |
min_token_length |
Heltal >= 1 |
3 |
Minimilängd för tokenens som ska behållas. Token som är kortare än detta tas bort under indexeringen. Endast giltigt när tokenizer = 'split'. |
Detaljerad information om ogiltiga alternativfel finns i SEARCH_INDEX_INVALID_PARAMETERS felvillkor.
Välj en tokenizer för ditt användningsfall
Sökindex har två tillgängliga tokenizeralternativ, beroende på ditt användningsfall:
| Tokeniserare | Användningsfall | Description |
|---|---|---|
ngram |
Delsträngsmatchning. | Delar upp text i överlappande n-gram av längden ngram_size. |
split |
Inneslutningskontroller med hela ord. | Delar upp text i ordtoken. En token består av en följd av Unicode-bokstäver (\p{L}) och kombinerande tecken (\p{M}); varje annat tecken är en avgränsare. |
Så här skapar du ett n-gramindex med en n-gramstorlek på 4:
CREATE SEARCH INDEX log_ngram_idx
ON logs (message)
OPTIONS (tokenizer = 'ngram', ngram_size = 4);
Så här skapar du ett split index med en minsta tokenlängd på 2:
CREATE SEARCH INDEX log_word_idx
ON logs (message)
OPTIONS (tokenizer = 'split', min_token_length = 2);
Fråga efter data med hjälp av search och isearch
Azure Databricks har två SQL-funktioner för att testa om ett sökmönster finns i ett eller flera textmål:
-
search: Skiftlägeskänslig. -
isearch: Skiftlägesokänslig.
Välj search eller isearch baserat på ditt krav på skiftlägeskänslighet. När de indexerade kolumnerna omfattas av ett fulltextsökningsindex använder Azure Databricks indexet för att hoppa över filer som garanterat inte innehåller matchande rader. Sökindex påverkar inte resultaten.
Index påskyndar frågorna mest när sökmönstret visas i en liten del av tabellens filer.
search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
Arguments
search och isearch acceptera följande argument:
-
targetmåste vara av typenSTRING,VARIANT,STRUCTellerARRAY, samma typer som indexering tillåter. Målen dedupliceras. -
patternmåste vara en strängliteral som inte är null. -
modeanger hurpatternmatchar varjetarget:-
substring(standard):patternmatchas som en delsträng inom varjetarget. -
word:patterndelas upp i ordtoken enligt samma regler som tokeniserarensplit. Funktionen returnerar sant om varje ord ipatternvisas i minst ett mål, oavsett ordning. Se Välj en tokenizer för ditt användningsfall.
-
Returns
search och isearch returnera ett BOOLEAN värde med trevärdeslogik:
-
trueom minst ett mål som inte är null matchar. -
nullom inga målmatchningar som inte är null men minst ett mål ärnull. -
falseom alla mål inte är null och ingen matchar.
Exempel
I följande exempel visas vanliga search frågor och isearch frågor:
-- 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');
Hantera index
Viktigt!
Fulltextsökningsindex uppdateras inte automatiskt när bastabellen ändras. Se Uppdatera ett index.
Azure Databricks bibehåller frågekorrigeringen, oavsett indexens färskhet. När en tabell innehåller icke-indexerade data använder frågan det befintliga indexet för att påskynda åtkomsten till de indexerade posterna och använder en tabellsökning efter de icke-indexerade posterna.
Använd följande åtgärder för att hantera sökindex i fulltext:
Beskriva eller visa ett index
Så här visar du information om ett index:
DESCRIBE INDEX log_idx;
Uppdatera ett index
Fulltextsökningsindex uppdateras inte automatiskt när bastabellen ändras.
Om du vill uppdatera indexet lägger du till poster för nya rader:
REFRESH INDEX log_idx;
REFRESH INDEX är en inkrementell åtgärd där data endast läggs till. Det indexerar ny data men tar inte bort poster för rader som har tagits bort.
Om du vill uppdatera indexet, både lägga till poster för nya rader och ta bort poster för borttagna rader, använder du REFRESH INDEX ... FULL:
REFRESH INDEX log_idx FULL;
En fullständig uppdatering kräver mer beräkningsresurser än en inkrementell uppdatering. Med tiden leder inkrementella uppdateringar till att inaktuella poster ansamlas, vilket ökar indexets storlek och påverkar prestanda negativt.
Ta bort ett index
Om du vill släppa ett index kör du följande:
DROP INDEX log_idx;
Om du vill undvika ett fel för saknade index använder du:
DROP INDEX IF EXISTS log_idx;
Note
Om du släpper bastabellen släpper kommandot även sökindexen i fulltext.
Begränsningar
Sökindex i fulltext har följande begränsningar:
- Det går inte att byta namn på en indexerad kolumn i bastabellen eller ändra dess datatyp.
- Tabeller med OpenSharing stöds inte. Om du lägger till bastabellen som en OpenSharing-källa eller ett mål när du har skapat indexet ignorerar Azure Databricks sökindexet.
- Tabeller med ytliga kloner stöds inte. Om du lägger till bastabellen som en ytlig klonkälla när du har skapat indexet ignorerar Azure Databricks sökindexet.
- Tabeller med attributbaserade åtkomstkontroller, kolumnmasker eller säkerhetsprinciper på radnivå stöds inte. Om du lägger till någon av dessa kontroller i en tabell med ett sökindex ignorerar Azure Databricks sökindexet. Se Grundläggande begrepp för attributbaserad åtkomstkontroll (ABAC).