Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Important
Deze functie bevindt zich in de bètaversie. Werkruimtebeheerders kunnen de toegang tot deze functie beheren vanaf de pagina Previews . Zie Azure Databricks previews beheren.
Een zoekindex in volledige tekst versnelt zoekopdrachten op een of meer tekstkolommen van een beheerde Delta Lake- of Iceberg-tabel. De index biedt ondersteuning voor subtekenreekskoppeling en woordkoppeling. Wanneer u een query uitvoert op de tabel met de functies search of isearch, gebruikt Azure Databricks de index om bestanden over te slaan die gegarandeerd geen overeenkomende rijen bevatten. Dit vermindert de hoeveelheid gescande gegevens aanzienlijk, met name voor selectieve zoekacties.
Important
Indexen die tijdens de bètarelease zijn gemaakt, zijn niet gegarandeerd compatibel met latere releases. Wanneer de functie openbare preview bereikt, moet u bestaande indexen verwijderen en nieuwe indexen maken.
Requirements
Zoekindexen in volledige tekst hebben vereisten voor berekenings-, basistabel- en schemamachtigingen en basistabelconfiguratie.
Compute
Zoekindexen voor volledige tekst zijn alleen beschikbaar in Azure Databricks Runtime 18.2 en hoger. U moet deze bètafunctie inschakelen in uw werkruimte-instellingen. Zie Azure Databricks previews beheren.
Permissions
Een zoekindex maken:
- U moet de
MODIFYmachtiging hebben voor de tabel waarnaar wordt verwezen in de zoekindex. - U moet over de
CREATE TABLEmachtiging beschikken voor het bovenliggende schema. Een schema-eigenaar of gebruiker met de bevoegdheid BEHEREN kan uCREATE TABLEbevoegdheden verlenen voor het schema.
Tabelconfiguratie
Voordat u een zoekindex voor volledige tekst maakt, moet de basistabel aan het volgende voldoen:
- U moet de index maken in dezelfde catalogus en hetzelfde schema als de basistabel.
- De tabel is een beheerde Delta Lake-tabel of een beheerde Iceberg-tabel.
- Het traceren van rijen is ingeschakeld (
delta.enableRowTracking = true). Zie Tracering van rijen in Azure Databricks. - Geïndexeerde kolommen zijn van het type
STRING,VARIANTofSTRUCTARRAY.STRINGkolommen gebruiken deUTF8_BINARYsortering. - Een
STRUCTkolom bevat ten minste éénSTRING,VARIANTofARRAYbladveld op een nestdiepte; andere bladvelden worden genegeerd. - De tabel gebruikt geen functies uit de lijst met beperkingen, waaronder: OpenSharing, ondiep klonen, op kenmerken gebaseerd toegangsbeheer, beveiligingsbeleid op rijniveau en kolommaskers. Zie Beperkingen.
Zie voor meer informatie over tabelprotocolvereisten, die van toepassing zijn op delta lake- en icebergtabellen, de compatibiliteit en protocollen van Delta Lake-functies.
Een zoekindex voor volledige tekst maken
U kunt maximaal vier indexen maken voor één tabel, elk op een andere kolom.
Hiermee CREATE SEARCH INDEX maakt u een index over een of meer tekstkolommen. In het volgende voorbeeld worden twee tekstkolommen van een bestaande logboektabel geïndexeert:
CREATE SEARCH INDEX log_idx
ON logs (message, error_detail);
De volledige syntaxis is:
CREATE SEARCH INDEX [IF NOT EXISTS] index_name
ON table_name ( column_name [, column_name ...] )
[OPTIONS ( option_key = option_value [, ... ] )]
index_name moet uniek zijn binnen het schema en mag niet overeenkomen met een bestaande tabelnaam.
Zie Opties als u wilt bepalen hoe de tekst wordt getokeniseerd.
Warning
Als CREATE SEARCH INDEX en REFRESH INDEX mislukt tijdens de uitvoering, voert u uit REFRESH INDEX om te herstellen van een gedeeltelijke fout.
Opties
De OPTIONS component accepteert de volgende sleutels:
| Key | Waarden | Verstek | Description |
|---|---|---|---|
tokenizer |
ngram, split |
ngram |
Hoe de tekst wordt getokeniseerd voor indexering. Zie Een tokenizer selecteren voor uw use-case. |
ngram_size |
geheel getal in [3, 10] |
5 |
Lengte van de gegenereerde n-grammen. Alleen geldig wanneer tokenizer = 'ngram'. |
min_token_length |
geheel getal >= 1 |
3 |
Minimale lengte van tokens die moeten worden bewaard. Tokens korter dan dit worden verwijderd tijdens het indexeren. Alleen geldig wanneer tokenizer = 'split'. |
Voor gedetailleerde informatie over fouten met ongeldige opties, zie de foutconditie SEARCH_INDEX_INVALID_PARAMETERS.
Selecteer een tokenizer voor uw use-case
Zoekindexen hebben 2 tokenizeropties beschikbaar, afhankelijk van uw use-case:
| Tokenizer | Gebruiksituatie | Description |
|---|---|---|
ngram |
Subtekenreekskoppeling. | Splitst tekst op in overlappende n-grammen met een lengte van ngram_size. |
split |
Insluitingscontroles voor hele woorden. | Hiermee wordt tekst gesplitst in woordtokens. Een token is een uitvoering van Unicode-letters (\p{L}) en combinatiemarkeringen (\p{M}); een ander teken is een scheidingsteken. |
Een n-gram-index maken met een n-gramgrootte van 4:
CREATE SEARCH INDEX log_ngram_idx
ON logs (message)
OPTIONS (tokenizer = 'ngram', ngram_size = 4);
Een index maken split met een minimale tokenlengte van 2:
CREATE SEARCH INDEX log_word_idx
ON logs (message)
OPTIONS (tokenizer = 'split', min_token_length = 2);
Query's uitvoeren op gegevens met behulp van search en isearch
Azure Databricks heeft twee SQL-functies om te testen of een zoekpatroon aanwezig is in een of meer tekstdoelen:
-
search: Hoofdlettergevoelig. -
isearch: Niet hoofdlettergevoelig.
Selecteer search of isearch op basis van uw hoofdlettergevoeligheidsvereiste. Wanneer de geïndexeerde kolommen worden gedekt door een zoekindex in volledige tekst, gebruikt Azure Databricks de index om bestanden over te slaan die gegarandeerd geen overeenkomende rijen bevatten. Zoekindexen hebben geen invloed op resultaten.
Indexen versnellen query's het meest wanneer het zoekpatroon wordt weergegeven in een klein deel van de bestanden van de tabel.
search( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
isearch( target [, target ... ] , 'pattern' [, mode => 'substring' | 'word' ] )
Arguments
search en isearch accepteer de volgende argumenten:
-
targetmoet van het typeSTRING,VARIANT,STRUCTofARRAY, dezelfde typen zijn die indexering toestaat. Doelen worden ontdubbeld. -
patternmoet een letterlijke tekenreeks zijn die niet null is. -
modegeeft aan hoepatternovereenkomt met elktarget:-
substring(standaard):patternkomt overeen als een subtekenreeks binnen elketarget. -
word:patternwordt gesplitst in woordtokens met behulp van dezelfde regel als desplittokenizer. De functie retourneert true als elk woord inpatternin ten minste één doelitem voorkomt, ongeacht de volgorde. Zie Een tokenizer selecteren voor uw use-case.
-
Returns
search en isearch retourneert een BOOLEAN waarde met drie waardenlogica:
-
trueals ten minste één doel dat niet null is, overeenkomt. -
nullals geen enkele niet-null-waarde overeenkomt, maar ten minste één waardenullis. -
falseals alle doelwaarden niet-null zijn en geen enkele overeenkomt.
Examples
In de volgende voorbeelden ziet u veelvoorkomende search query's en isearch query's:
-- 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');
Indexen beheren
Important
Zoekindexen in volledige tekst worden niet automatisch bijgewerkt wanneer de basistabel wordt gewijzigd. Zie Een index vernieuwen.
Azure Databricks de juistheid van query's behoudt, ongeacht de nieuwheid van de index. Wanneer een tabel niet-geïndexeerde gegevens bevat, gebruikt de query de bestaande index om de toegang tot de geïndexeerde records te versnellen en gebruikt een tabelscan voor de niet-geïndexeerde records.
Gebruik de volgende bewerkingen om zoekindexen in volledige tekst te beheren:
Een index beschrijven of weergeven
Informatie over een index weergeven:
DESCRIBE INDEX log_idx;
Een index vernieuwen
Zoekindexen in volledige tekst worden niet automatisch bijgewerkt wanneer de basistabel wordt gewijzigd.
Als u de index wilt bijwerken, voegt u vermeldingen toe voor nieuwe rijen:
REFRESH INDEX log_idx;
REFRESH INDEX is een incrementele bewerking waarbij uitsluitend wordt toegevoegd. Het indexeert nieuwe gegevens, maar verwijdert geen vermeldingen voor verwijderde rijen.
Als u de index wilt bijwerken, voegt REFRESH INDEX ... FULLu zowel vermeldingen voor nieuwe rijen toe als verwijdert u vermeldingen voor verwijderde rijen:
REFRESH INDEX log_idx FULL;
Een volledige vernieuwing vereist meer rekenresources dan een incrementele vernieuwing. Na verloop van tijd verzamelen incrementele vernieuwingen verouderde vermeldingen, waardoor de grootte van de index wordt vergroot en de prestaties negatief worden beïnvloed.
Verwijder een index
Voer het volgende uit om een index te verwijderen:
DROP INDEX log_idx;
Als u een fout voor ontbrekende indexen wilt voorkomen, gebruikt u:
DROP INDEX IF EXISTS log_idx;
Note
Als u de basistabel verwijdert, worden met de opdracht ook de zoekindexen in volledige tekst verwijderd.
Beperkingen
Zoekindexen in volledige tekst hebben de volgende beperkingen:
- Het wijzigen van de naam van een geïndexeerde kolom in de basistabel of het wijzigen van het gegevenstype wordt niet ondersteund.
- Tabellen met OpenSharing worden niet ondersteund. Als u de basistabel toevoegt als een OpenSharing-bron of -doel nadat u de index hebt gemaakt, negeert Azure Databricks de zoekindex.
- Tabellen met ondiepe klonen worden niet ondersteund. Als u de basistabel toevoegt als een ondiepe kloonbron nadat u de index hebt gemaakt, Azure Databricks de zoekindex negeert.
- Tabellen met op kenmerken gebaseerde toegangsbeheer, kolommaskers of beveiligingsbeleid op rijniveau worden niet ondersteund. Als u een van deze besturingselementen toevoegt aan een tabel met een zoekindex, negeert Azure Databricks de zoekindex. Zie basisconcepten voor op kenmerken gebaseerd toegangsbeheer (ABAC).