Gegevens indexeren uit Azure SQL Database
In dit artikel leert u hoe u een indexeerfunctie configureert waarmee inhoud uit Azure SQL Database of een met Azure SQL beheerd exemplaar wordt geïmporteerd en hoe u deze doorzoekbaar maakt in Azure AI Search.
Dit artikel is een aanvulling op Het maken van een indexeerfunctie met informatie die specifiek is voor Azure SQL. Azure Portal en REST API's worden gebruikt om een driedelige werkstroom te demonstreren die gebruikelijk is voor alle indexeerfuncties: een gegevensbron maken, een index maken, een indexeerfunctie maken. Gegevensextractie vindt plaats wanneer u de aanvraag Indexeerfunctie maken verzendt.
Dit artikel bevat ook:
Een beschrijving van het beleid voor wijzigingsdetectie dat wordt ondersteund door de Azure SQL-indexeerfunctie, zodat u incrementele indexering kunt instellen.
Een sectie met veelgestelde vragen (FAQ) voor antwoorden op vragen over functiecompatibiliteit.
Notitie
Realtime gegevenssynchronisatie is niet mogelijk met een indexeerfunctie. Een indexeerfunctie kan uw tabel maximaal om de vijf minuten opnieuw indexeren. Als gegevensupdates eerder in de index moeten worden doorgevoerd, raden we u aan bijgewerkte rijen rechtstreeks te pushen.
Vereisten
Een Azure SQL-database met gegevens in één tabel of weergave, of een SQL Managed Instance met een openbaar eindpunt.
Gebruik een tabel als uw gegevens groot zijn of als u incrementele indexering nodig hebt met behulp van de systeemeigen detectiemogelijkheden voor wijzigingen van SQL.
Gebruik een weergave als u gegevens uit meerdere tabellen wilt samenvoegen. Grote weergaven zijn niet ideaal voor SQL-indexeerfunctie. Een tijdelijke oplossing is het maken van een nieuwe tabel voor opname in uw Azure AI Search-index. U kunt geïntegreerde wijzigingen bijhouden in SQL gebruiken om nieuwe en gewijzigde rijen bij te houden, wat eenvoudiger te implementeren is dan High Water Mark.
Leesmachtigingen. Azure AI Search ondersteunt SQL Server-verificatie, waarbij de gebruikersnaam en het wachtwoord worden opgegeven in de verbindingsreeks. U kunt ook een beheerde identiteit instellen en Azure-rollen gebruiken.
Als u de voorbeelden in dit artikel wilt doorlopen, hebt u Azure Portal of een REST-client nodig. Als u Azure Portal gebruikt, moet u ervoor zorgen dat toegang tot alle openbare netwerken is ingeschakeld in de Azure SQL-firewall en dat de client toegang heeft via een regel voor binnenkomend verkeer. Voor een REST-client die lokaal wordt uitgevoerd, configureert u de SQL Server-firewall om binnenkomende toegang vanaf het IP-adres van uw apparaat toe te staan. Andere methoden voor het maken van een Azure SQL-indexeerfunctie zijn Azure SDK's.
Proberen met voorbeeldgegevens
Gebruik deze instructies om een tabel in Azure SQL Database te maken en te laden voor testdoeleinden.
Download hotels-azure-sql.sql van GitHub om een tabel te maken in Azure SQL Database die een subset van de gegevensset met voorbeeldhotels bevat.
Meld u aan bij Azure Portal en maak een Azure SQL-database en -databaseserver. Overweeg om zowel SQL Server-verificatie als Microsoft Entra ID-verificatie te configureren. Als u geen machtigingen hebt voor het configureren van rollen in Azure, kunt u SQL-verificatie gebruiken als tijdelijke oplossing.
Configureer de serverfirewall voor alle binnenkomende aanvragen van uw lokale apparaat.
Selecteer query-editor (preview) in uw Azure SQL-database en selecteer vervolgens Nieuwe query.
Plak deze in en voer vervolgens het T-SQL-script uit waarmee de tabel Hotels wordt gemaakt.
CREATE TABLE tbl_hotels ( Id TINYINT PRIMARY KEY, Modified DateTime NULL DEFAULT '0000-00-00 00:00:00', IsDeleted TINYINT, HotelName VARCHAR(40), Category VARCHAR(20), City VARCHAR(30), State VARCHAR(4), Description VARCHAR(500) );
Plak het in en voer vervolgens het T-SQL-script uit waarmee records worden ingevoegd.
-- Insert rows INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (1, CURRENT_TIMESTAMP, 0, 'Stay-Kay City Hotel', 'Boutique', 'New York', 'NY', 'This classic hotel is fully-refurbished and ideally located on the main commercial artery of the city in the heart of New York. A few minutes away is Times Square and the historic centre of the city, as well as other places of interest that make New York one of Americas most attractive and cosmopolitan cities.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (10, CURRENT_TIMESTAMP, 0, 'Countryside Hotel', 'Extended-Stay', 'Durham', 'NC', 'Save up to 50% off traditional hotels. Free WiFi, great location near downtown, full kitchen, washer & dryer, 24\/7 support, bowling alley, fitness center and more.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (11, CURRENT_TIMESTAMP, 0, 'Royal Cottage Resort', 'Extended-Stay', 'Bothell', 'WA', 'Your home away from home. Brand new fully equipped premium rooms, fast WiFi, full kitchen, washer & dryer, fitness center. Inner courtyard includes water features and outdoor seating. All units include fireplaces and small outdoor balconies. Pets accepted.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (12, CURRENT_TIMESTAMP, 0, 'Winter Panorama Resort', 'Resort and Spa', 'Wilsonville', 'OR', 'Plenty of great skiing, outdoor ice skating, sleigh rides, tubing and snow biking. Yoga, group exercise classes and outdoor hockey are available year-round, plus numerous options for shopping as well as great spa services. Newly-renovated with large rooms, free 24-hr airport shuttle & a new restaurant. Rooms\/suites offer mini-fridges & 49-inch HDTVs.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (13, CURRENT_TIMESTAMP, 0, 'Luxury Lion Resort', 'Luxury', 'St. Louis', 'MO', 'Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (14, CURRENT_TIMESTAMP, 0, 'Twin Vortex Hotel', 'Luxury', 'Dallas', 'TX', 'New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (15, CURRENT_TIMESTAMP, 0, 'By the Market Hotel', 'Budget', 'New York', 'NY', 'Book now and Save up to 30%. Central location. Walking distance from the Empire State Building & Times Square, in the Chelsea neighborhood. Brand new rooms. Impeccable service.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (16, CURRENT_TIMESTAMP, 0, 'Double Sanctuary Resort', 'Resort and Spa', 'Seattle', 'WA', '5 Star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in\/out, Fitness Center & espresso in room.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (17, CURRENT_TIMESTAMP, 0, 'City Skyline Antiquity Hotel', 'Boutique', 'New York', 'NY', 'In vogue since 1888, the Antiquity Hotel takes you back to bygone era. From the crystal chandeliers that adorn the Green Room, to the arched ceilings of the Grand Hall, the elegance of old New York beckons. Elevate Your Experience. Upgrade to a premiere city skyline view for less, where old world charm combines with dramatic views of the city, local cathedral and midtown.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (18, CURRENT_TIMESTAMP, 0, 'Ocean Water Resort & Spa', 'Luxury', 'Tampa', 'FL', 'New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (19, CURRENT_TIMESTAMP, 0, 'Economy Universe Motel', 'Budget', 'Redmond', 'WA', 'Local, family-run hotel in bustling downtown Redmond. We are a pet-friendly establishment, near expansive Marymoor park, haven to pet owners, joggers, and sports enthusiasts. Close to the highway and just a short drive away from major cities.'); INSERT INTO tbl_hotels (Id, Modified, IsDeleted, HotelName, Category, City, State, Description) VALUES (20, CURRENT_TIMESTAMP, 0, 'Delete Me Hotel', 'Unknown', 'Nowhere', 'XX', 'Test-case row for change detection and delete detection . For change detection, modify any value, and then re-run the indexer. For soft-delete, change IsDelete from zero to a one, and then re-run the indexer.');
Voer een query uit om het uploaden te bevestigen.
SELECT Description FROM tbl_hotels;
Als het goed is, ziet u resultaten die vergelijkbaar zijn met de volgende schermopname.
Het veld Beschrijving biedt de meest uitgebreide inhoud. U moet dit veld richten op zoeken in volledige tekst en optionele vectorisatie.
Nu u een databasetabel hebt, kunt u de Azure-portal, REST-client of een Azure SDK gebruiken om uw gegevens te indexeren.
Tip
Een andere resource die voorbeeldinhoud en code biedt, vindt u in Azure-Samples/SQL-AI-samples.
De Azure-portal gebruiken
U kunt de wizard Gegevens importeren of de wizard Gegevens importeren en vectoriseren gebruiken om indexering vanuit een SQL-databasetabel of -weergave te automatiseren. De configuratie van de gegevensbron is vergelijkbaar voor beide wizards.
Selecteer of controleer bij Verbinding maken met uw gegevens of controleer of het gegevensbrontype Azure SQL Database of SQL-database is.
De naam van de gegevensbron verwijst naar het verbindingsobject voor de gegevensbron in Azure AI Search. Als u de vectorwizard gebruikt, wordt de naam van uw gegevensbron automatisch gegenereerd met behulp van een aangepast voorvoegsel dat is opgegeven aan het einde van de wizardwerkstroom.
Geef de servernaam, databasenaam en tabel- of weergavenaam op.
Azure Portal valideert de verbinding. Als de database is onderbroken vanwege inactiviteit, gaat u naar de pagina van de databaseserver en controleert u of de databasestatus online is. U kunt een query uitvoeren op elke tabel om de database te activeren.
Geef een verificatiemethode op, ofwel een SQL Server-aanmelding die is gedefinieerd tijdens het instellen van de server of een beheerde identiteit.
Als u Azure AI Search configureert voor het gebruik van een beheerde identiteit en u een roltoewijzing maakt op de databaseserver die sql Server-inzender- of SQL DB-inzendermachtigingen voor de identiteit verleent, kan uw indexeerfunctie verbinding maken met Azure SQL met behulp van Microsoft Entra ID en rollen.
Voor de wizard Gegevens importeren en vectoriseren kunt u opties opgeven voor het bijhouden van wijzigingen en verwijderingen.
Het bijhouden van verwijderingen is gebaseerd op voorlopig verwijderen met behulp van aangepaste metagegevens.
Wijzigingen bijhouden is gebaseerd op geïntegreerde sql Server-wijzigingen bijhouden of wijzigingen bijhouden van hoge watermarkeringen.
Ga verder met de resterende stappen om de wizard te voltooien:
De REST API’s gebruiken
In deze sectie ziet u de REST API-aanroepen die een gegevensbron, index en indexeerfunctie maken.
De gegevensbron definiëren
De definitie van de gegevensbron geeft de gegevens op die moeten worden geïndexeerde, referenties en beleidsregels voor het identificeren van wijzigingen in de gegevens. Een gegevensbron wordt gedefinieerd als een onafhankelijke resource, zodat deze kan worden gebruikt door meerdere indexeerfuncties.
Gegevensbron maken of gegevensbron maken of bijwerken om de definitie ervan in te stellen:
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01 Content-Type: application/json api-key: admin-key { "name" : "myazuresqldatasource", "description" : "A database for testing Azure AI Search indexes.", "type" : "azuresql", "credentials" : { "connectionString" : "Server=tcp:<your server>.database.windows.net,1433;Database=<your database>;User ID=<your user name>;Password=<your password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" }, "container" : { "name" : "name of the table or view that you want to index", "query" : null (not supported in the Azure SQL indexer) }, "dataChangeDetectionPolicy": null, "dataDeletionDetectionPolicy": null, "encryptionKey": null, "identity": null }
Geef een unieke naam op voor de gegevensbron die de naamconventies van Azure AI Search volgt.
Stel 'type' in op
"azuresql"
(vereist).Stel referenties in op een verbindingsreeks:
U kunt een volledige toegang krijgen verbindingsreeks via Azure Portal. Gebruik de
ADO.NET connection string
optie. Stel de gebruikersnaam en het wachtwoord in.U kunt ook een beheerde identiteit opgeven verbindingsreeks die geen databasegeheimen bevat met de volgende indeling:
Initial Catalog|Database=<your database name>;ResourceId=/subscriptions/<your subscription ID>/resourceGroups/<your resource group name>/providers/Microsoft.Sql/servers/<your SQL Server name>/;Connection Timeout=connection timeout length;
Zie Verbinding maken met azure SQL Database-indexeerfunctie met behulp van een beheerde identiteit voor meer informatie.
Zoekvelden toevoegen aan een index
Voeg in een zoekindex velden toe die overeenkomen met de velden in SQL Database. Zorg ervoor dat het zoekindexschema compatibel is met het bronschema met behulp van gelijkwaardige gegevenstypen.
Een index maken of bijwerken om zoekvelden te definiëren waarmee gegevens worden opgeslagen:
POST https://[service name].search.windows.net/indexes?api-version=2024-07-01 Content-Type: application/json api-key: [Search service admin key] { "name": "mysearchindex", "fields": [{ "name": "id", "type": "Edm.String", "key": true, "searchable": false }, { "name": "description", "type": "Edm.String", "filterable": false, "searchable": true, "sortable": false, "facetable": false, "suggestions": true } ] }
Maak een documentsleutelveld ('sleutel': true') waarmee elk zoekdocument uniek wordt geïdentificeerd. Dit is het enige veld dat vereist is in een zoekindex. Normaal gesproken wordt de primaire sleutel van de tabel toegewezen aan het indexsleutelveld. De documentsleutel moet uniek en niet null zijn. De waarden kunnen numeriek zijn in brongegevens, maar in een zoekindex is een sleutel altijd een tekenreeks.
Maak meer velden om meer doorzoekbare inhoud toe te voegen. Zie Een index maken voor hulp.
Toewijzingsgegevenstypen
SQL-gegevenstype | Azure AI Search-veldtypen | Opmerkingen |
---|---|---|
bit | Edm.Boolean, Edm.String | |
int, smallint, tinyint | Edm.Int32, Edm.Int64, Edm.String | |
bigint | Edm.Int64, Edm.String | |
real, float | Edm.Double, Edm.String | |
smallmoney, geld decimal numeriek | Edm.String | Azure AI Search biedt geen ondersteuning voor het converteren van decimale typen naar Edm.Double omdat hierdoor precisie verloren gaat |
char, nchar, varchar, nvarchar | Edm.String Collection(Edm.String) |
Een SQL-tekenreeks kan worden gebruikt om een verzameling(Edm.String ) veld te vullen als de tekenreeks een JSON-matrix met tekenreeksen vertegenwoordigt: ["red", "white", "blue"] |
smalldatetime, datetime, datetime2, datetimeoffset | Edm.DateTimeOffset, Edm.String | |
uniqueidentifer | Edm.String | |
geografie | Edm.GeographyPoint | Alleen geografische instanties van het type POINT met SRID 4326 (de standaardinstelling) worden ondersteund |
rowversion | Niet van toepassing | Kolommen met rijversies kunnen niet worden opgeslagen in de zoekindex, maar kunnen worden gebruikt voor het bijhouden van wijzigingen |
tijd, tijdspanne, binair, varbinaire, afbeelding, xml, geometrie, CLR-typen | Niet van toepassing | Niet ondersteund |
De Azure SQL-indexeerfunctie configureren en uitvoeren
Zodra de index en de gegevensbron zijn gemaakt, kunt u de indexeerfunctie maken. De configuratie van de indexeerfunctie geeft de invoer, parameters en eigenschappen aan die het gedrag van de uitvoeringstijd regelen.
Maak of werk een indexeerfunctie bij door deze een naam te geven en te verwijzen naar de gegevensbron en doelindex:
POST https://[service name].search.windows.net/indexers?api-version=2024-07-01 Content-Type: application/json api-key: [search service admin key] { "name" : "[my-sqldb-indexer]", "dataSourceName" : "[my-sqldb-ds]", "targetIndexName" : "[my-search-index]", "disabled": null, "schedule": null, "parameters": { "batchSize": null, "maxFailedItems": 0, "maxFailedItemsPerBatch": 0, "base64EncodeKeys": false, "configuration": { "queryTimeout": "00:04:00", "convertHighWaterMarkToRowVersion": false, "disableOrderByHighWaterMarkColumn": false } }, "fieldMappings": [], "encryptionKey": null }
Onder parameters bevat de configuratiesectie parameters die specifiek zijn voor Azure SQL:
De standaardtime-out van query's voor het uitvoeren van SQL-query's is vijf minuten, die u kunt overschrijven.
"convertHighWaterMarkToRowVersion" optimaliseert voor het beleid voor wijzigingsdetectie voor hoge watermarkeringen. Beleidsregels voor wijzigingsdetectie worden ingesteld in de gegevensbron. Als u het systeemeigen beleid voor wijzigingsdetectie gebruikt, heeft deze parameter geen effect.
"disableOrderByHighWaterMarkColumn" zorgt ervoor dat de SQL-query die wordt gebruikt door het beleid voor hoge watermarkeringen, de ORDER BY-component weglaat. Als u het systeemeigen beleid voor wijzigingsdetectie gebruikt, heeft deze parameter geen effect.
Geef veldtoewijzingen op als er verschillen zijn in veldnaam of -type, of als u meerdere versies van een bronveld in de zoekindex nodig hebt.
Zie Een indexeerfunctie maken voor meer informatie over andere eigenschappen.
Een indexeerfunctie wordt automatisch uitgevoerd wanneer deze wordt gemaakt. U kunt dit voorkomen door 'uitgeschakeld' in te stellen op waar. Als u de uitvoering van de indexeerfunctie wilt beheren, voert u een indexeerfunctie op aanvraag uit of plaatst u deze in een schema.
De status van de indexeerfunctie controleren
Als u de status en uitvoeringsgeschiedenis van de indexeerfunctie wilt controleren, controleert u de uitvoeringsgeschiedenis van de indexeerfunctie in Azure Portal of verzendt u een REST API-aanvraag voor indexeerstatus ophalen
Open zoekbeheerindexeerfuncties> op de pagina van de zoekservice.
Selecteer een indexeerfunctie voor toegang tot de configuratie- en uitvoeringsgeschiedenis.
Selecteer een specifieke indexeerfunctie om details, waarschuwingen en fouten weer te geven.
De uitvoeringsgeschiedenis bevat maximaal 50 van de laatst voltooide uitvoeringen, die in de omgekeerde chronologische volgorde worden gesorteerd, zodat de laatste uitvoering als eerste wordt uitgevoerd.
Nieuwe, gewijzigde en verwijderde rijen indexeren
Als uw SQL-database het bijhouden van wijzigingen ondersteunt, kan een zoekindexeerfunctie alleen de nieuwe en bijgewerkte inhoud van de volgende indexeerfunctie ophalen.
Als u incrementele indexering wilt inschakelen, stelt u de eigenschap dataChangeDetectionPolicy in uw gegevensbrondefinitie in. Deze eigenschap vertelt de indexeerfunctie welk mechanisme voor het bijhouden van wijzigingen wordt gebruikt in uw tabel of weergave.
Voor Azure SQL-indexeerfuncties zijn er twee beleidsregels voor wijzigingsdetectie:
"SqlIntegratedChangeTrackingPolicy" (alleen van toepassing op tabellen)
"HighWaterMarkChangeDetectionPolicy" (werkt voor tabellen en weergaven)
Geïntegreerd SQL-Wijzigingen bijhouden-beleid
We raden u aan 'SqlIntegratedChangeTrackingPolicy' te gebruiken voor de efficiëntie en de mogelijkheid om verwijderde rijen te identificeren.
Databasevereisten:
- SQL Server 2012 SP3 en hoger, als u SQL Server op virtuele Azure-machines gebruikt
- Azure SQL Database of SQL Managed Instance
- Alleen tabellen (geen weergaven)
- Schakel wijzigingen bijhouden in voor de tabel in de database
- Geen samengestelde primaire sleutel (een primaire sleutel met meer dan één kolom) in de tabel
- Geen geclusterde indexen in de tabel. Als tijdelijke oplossing moet elke geclusterde index worden verwijderd en opnieuw worden gemaakt als niet-geclusterde index, maar de prestaties kunnen worden beïnvloed in de bron in vergelijking met een geclusterde index
Beleidsregels voor wijzigingsdetectie worden toegevoegd aan definities van gegevensbronnen. Als u dit beleid wilt gebruiken, maakt of werkt u uw gegevensbron als volgt bij:
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SqlIntegratedChangeTrackingPolicy"
}
}
Bij het gebruik van geïntegreerd SQL-beleid voor het bijhouden van wijzigingen geeft u geen afzonderlijk beleid voor gegevensverwijdering op. Het geïntegreerde SQL-beleid voor het bijhouden van wijzigingen heeft ingebouwde ondersteuning voor het identificeren van verwijderde rijen. Als de verwijderde rijen echter automatisch worden gedetecteerd, moet de documentsleutel in uw zoekindex hetzelfde zijn als de primaire sleutel in de SQL-tabel.
Notitie
Wanneer u TRUNCATE TABLE gebruikt om een groot aantal rijen uit een SQL-tabel te verwijderen, moet de indexeerfunctie opnieuw worden ingesteld om de status van het bijhouden van wijzigingen opnieuw in te stellen om het verwijderen van rijen op te halen.
Beleid voor wijzigingsdetectie hoog watermarkering
Dit beleid voor wijzigingsdetectie is afhankelijk van een kolom met hoge watermarkeringen in uw tabel of weergave die de versie of het tijdstip vastlegt waarop een rij voor het laatst is bijgewerkt. Als u een weergave gebruikt, moet u beleid voor hoge watermarkeringen gebruiken.
De kolom met hoge watermarkeringen moet voldoen aan de volgende vereisten:
- Alle invoegingen geven een waarde op voor de kolom.
- Alle updates voor een item wijzigen ook de waarde van de kolom.
- De waarde van deze kolom wordt verhoogd met elke invoeg- of update.
- Query's met de volgende WHERE- en ORDER BY-componenten kunnen efficiënt worden uitgevoerd:
WHERE [High Water Mark Column] > [Current High Water Mark Value] ORDER BY [High Water Mark Column]
Notitie
We raden u ten zeerste aan om het gegevenstype rowversion te gebruiken voor de kolom met hoge watermarkeringen. Als een ander gegevenstype wordt gebruikt, is het bijhouden van wijzigingen niet gegarandeerd dat alle wijzigingen worden vastgelegd in de aanwezigheid van transacties die gelijktijdig met een indexeerquery worden uitgevoerd. Wanneer u rowversion gebruikt in een configuratie met alleen-lezen replica's, moet u de indexeerfunctie aanwijzen op de primaire replica. Alleen een primaire replica kan worden gebruikt voor scenario's voor gegevenssynchronisatie.
Beleidsregels voor wijzigingsdetectie worden toegevoegd aan definities van gegevensbronnen. Als u dit beleid wilt gebruiken, maakt of werkt u uw gegevensbron als volgt bij:
POST https://myservice.search.windows.net/datasources?api-version=2024-07-01
Content-Type: application/json
api-key: admin-key
{
"name" : "myazuresqldatasource",
"type" : "azuresql",
"credentials" : { "connectionString" : "connection string" },
"container" : { "name" : "table or view name" },
"dataChangeDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
"highWaterMarkColumnName" : "[a rowversion or last_updated column name]"
}
}
Notitie
Als de brontabel geen index heeft voor de kolom met hoge watermarkeringen, kunnen er een time-out optreden voor query's die door de SQL-indexeerfunctie worden gebruikt. Met name voor de ORDER BY [High Water Mark Column]
component moet een index efficiënt worden uitgevoerd wanneer de tabel veel rijen bevat.
convertHighWaterMarkToRowVersion
Als u een gegevenstype rowversion gebruikt voor de kolom met hoge watermarkeringen, kunt u overwegen om de eigenschap in de configuratie van de convertHighWaterMarkToRowVersion
indexeerfunctie in te stellen. Als u deze eigenschap instelt op true, resulteert dit in het volgende gedrag:
Gebruikt het gegevenstype rowversion voor de kolom met hoge watermarkeringen in de SQL-query van de indexeerfunctie. Door het juiste gegevenstype te gebruiken, worden de queryprestaties van de indexeerfunctie verbeterd.
Trekt er een af van de rowversion-waarde voordat de indexeerfunctiequery wordt uitgevoerd. Weergaven met een-op-veel-joins hebben mogelijk rijen met dubbele rowversion-waarden. Als u er één aftrekken, zorgt u ervoor dat de indexeerquery deze rijen niet mist.
Als u deze eigenschap wilt inschakelen, maakt of werkt u de indexeerfunctie bij met de volgende configuratie:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "convertHighWaterMarkToRowVersion" : true } }
}
queryTimeout
Als er time-outfouten optreden, stelt u de configuratie-instelling van de queryTimeout
indexeerfunctie in op een waarde die hoger is dan de standaard time-out van 5 minuten. Als u bijvoorbeeld de time-out wilt instellen op 10 minuten, maakt of werkt u de indexeerfunctie bij met de volgende configuratie:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "queryTimeout" : "00:10:00" } }
}
disableOrderByHighWaterMarkColumn
U kunt de ORDER BY [High Water Mark Column]
component ook uitschakelen. Dit wordt echter niet aanbevolen omdat als de uitvoering van de indexeerfunctie wordt onderbroken door een fout, de indexeerfunctie alle rijen opnieuw moet verwerken als deze later wordt uitgevoerd, zelfs als de indexeerfunctie al bijna alle rijen heeft verwerkt op het moment dat deze werd onderbroken. Als u de ORDER BY
component wilt uitschakelen, gebruikt u de disableOrderByHighWaterMarkColumn
instelling in de definitie van de indexeerfunctie:
{
... other indexer definition properties
"parameters" : {
"configuration" : { "disableOrderByHighWaterMarkColumn" : true } }
}
Detectiebeleid voor voorlopig verwijderen van kolommen
Wanneer rijen uit de brontabel worden verwijderd, wilt u deze rijen waarschijnlijk ook uit de zoekindex verwijderen. Als u het geïntegreerde SQL-beleid voor het bijhouden van wijzigingen gebruikt, wordt dit voor u geregeld. Het beleid voor het bijhouden van wijzigingen in hoge watermarkeringen helpt u echter niet bij verwijderde rijen. Wat u moet doen?
Als de rijen fysiek uit de tabel worden verwijderd, kan Azure AI Search de aanwezigheid van records die niet meer bestaan, niet afleiden. U kunt echter de techniek 'voorlopig verwijderen' gebruiken om rijen logisch te verwijderen zonder ze uit de tabel te verwijderen. Voeg een kolom toe aan uw tabel of bekijk en markeer rijen als verwijderd met behulp van die kolom.
Wanneer u de techniek voor voorlopig verwijderen gebruikt, kunt u het beleid voor voorlopig verwijderen als volgt opgeven bij het maken of bijwerken van de gegevensbron:
{
…,
"dataDeletionDetectionPolicy" : {
"@odata.type" : "#Microsoft.Azure.Search.SoftDeleteColumnDeletionDetectionPolicy",
"softDeleteColumnName" : "[a column name]",
"softDeleteMarkerValue" : "[the value that indicates that a row is deleted]"
}
}
De softDeleteMarkerValue moet een tekenreeks zijn in de JSON-weergave van uw gegevensbron. Gebruik de tekenreeksweergave van uw werkelijke waarde. Als u bijvoorbeeld een kolom met gehele getallen hebt waarin verwijderde rijen zijn gemarkeerd met de waarde 1, gebruikt u "1"
. Als u een BIT-kolom hebt waarin verwijderde rijen zijn gemarkeerd met de Booleaanse waarde waar, gebruikt u de letterlijke tekenreeks "True"
of "true"
maakt het niet uit.
Als u een beleid voor voorlopig verwijderen instelt vanuit Azure Portal, voegt u geen aanhalingstekens toe rond de markeringswaarde voor voorlopig verwijderen. De inhoud van het veld wordt al als een tekenreeks begrepen en wordt automatisch omgezet in een JSON-tekenreeks voor u. In de vorige voorbeelden typt 1
u gewoon of true
True
in het veld van Azure Portal.
Veelgestelde vragen
V: Kan ik Always Encrypted-kolommen indexeren?
Nee, Always Encrypted-kolommen worden momenteel niet ondersteund door Azure AI Search-indexeerfuncties.
V: Kan ik azure SQL-indexeerfunctie gebruiken met SQL-databases die worden uitgevoerd op IaaS-VM's in Azure?
Ja. U moet echter toestaan dat uw zoekservice verbinding maakt met uw database. Zie Een verbinding van een Azure AI Search-indexeerfunctie configureren voor SQL Server op een Azure-VM voor meer informatie.
V: Kan ik azure SQL-indexeerfunctie gebruiken met SQL-databases die on-premises worden uitgevoerd?
Niet rechtstreeks. We raden u niet aan of bieden geen ondersteuning voor een directe verbinding, omdat u hiervoor uw databases moet openen voor internetverkeer. Klanten zijn geslaagd met dit scenario met behulp van brugtechnologieën zoals Azure Data Factory. Zie Gegevens pushen naar een Azure AI Search-index met behulp van Azure Data Factory voor meer informatie.
V: Kan ik een secundaire replica in een failovercluster gebruiken als gegevensbron?
Dat hangt ervan af. Voor volledige indexering van een tabel of weergave kunt u een secundaire replica gebruiken.
Voor incrementele indexering ondersteunt Azure AI Search twee beleidsregels voor wijzigingsdetectie: geïntegreerde sql-wijzigingen bijhouden en Hoge watermarkeringen.
Bij alleen-lezen replica's biedt SQL Database geen ondersteuning voor geïntegreerd bijhouden van wijzigingen. Daarom moet u beleid voor hoog watermarkeringen gebruiken.
Onze standaardaanbieding is het gebruik van het gegevenstype rowversion voor de kolom met hoge watermarkeringen. Het gebruik van rowversion is echter afhankelijk van de MIN_ACTIVE_ROWVERSION
functie, die niet wordt ondersteund voor alleen-lezen replica's. Daarom moet u de indexeerfunctie naar een primaire replica laten wijzen als u rowversion gebruikt.
Als u rowversion probeert te gebruiken op een alleen-lezen replica, krijgt u de volgende fout:
'Het gebruik van een rowversion-kolom voor het bijhouden van wijzigingen wordt niet ondersteund op secundaire (alleen-lezen) beschikbaarheidsreplica's. Werk de gegevensbron bij en geef een verbinding op met de primaire beschikbaarheidsreplica. De eigenschap Updateability van de huidige database is 'READ_ONLY'.
V: Kan ik een alternatieve, niet-rowversion-kolom gebruiken voor het bijhouden van wijzigingen in hoge watermarkeringen?
Het wordt niet aanbevolen. Alleen rowversion maakt betrouwbare gegevenssynchronisatie mogelijk. Afhankelijk van uw toepassingslogica kan het echter veilig zijn als:
U kunt ervoor zorgen dat wanneer de indexeerfunctie wordt uitgevoerd, er geen openstaande transacties in de tabel staan die worden geïndexeerd (bijvoorbeeld dat alle tabelupdates plaatsvinden als een batch volgens een schema en dat de Azure AI Search-indexeerfunctieplanning is ingesteld om overlapping met het tabelupdateschema te voorkomen).
U voert periodiek een volledige herindex uit om gemiste rijen op te halen.