Gegevens indexeren van flexibele Azure Database for MySQL-server

Belangrijk

MySQL-ondersteuning is momenteel beschikbaar als openbare preview onder aanvullende gebruiksvoorwaarden. Gebruik een preview-REST API (2020-06-30-preview of hoger) om uw inhoud te indexeren. Er is momenteel geen ondersteuning voor de portal.

In dit artikel leert u hoe u een indexeerfunctie configureert die inhoud importeert uit Azure Database for MySQL en deze doorzoekbaar maakt in Azure AI Search. De invoer van de indexeerfunctie is uw rij, in één tabel of weergave. Uitvoer is een zoekindex met doorzoekbare inhoud in afzonderlijke velden.

Dit artikel is een aanvulling op Het maken van een indexeerfunctie met informatie die specifiek is voor het indexeren van een flexibele Azure Database for MySQL-server. Hierbij worden de REST API's 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.

Wanneer deze is geconfigureerd voor het opnemen van een hoge watermarkering en voorlopig verwijderen, neemt de indexeerfunctie alle wijzigingen, uploads en verwijderingen voor uw MySQL-database. Deze wijzigingen worden weergegeven in uw zoekindex. Gegevensextractie vindt plaats wanneer u de aanvraag Indexeerfunctie maken verzendt.

Vereisten

  • Registreer u voor de preview om feedback over scenario's te geven. U hebt automatisch toegang tot de functie na het verzenden van formulieren.

  • Flexibele azure Database for MySQL-server en voorbeeldgegevens. Gegevens moeten zich in een tabel of weergave bevinden. Er is een primaire sleutel vereist. Als u een weergave gebruikt, moet deze een kolom met hoge watermarkeringen hebben.

  • Leesmachtigingen. Een volledige toegang verbindingsreeks bevat een sleutel die toegang verleent tot de inhoud, maar als u Azure-rollen gebruikt, moet u ervoor zorgen dat de beheerde identiteit van de zoekservice leesmachtigingen heeft voor MySQL.

  • Een REST-client voor het maken van de gegevensbron, index en indexeerfunctie.

    U kunt ook de Azure SDK voor .NET gebruiken. U kunt de portal niet gebruiken voor het maken van indexeerfuncties, maar u kunt indexeerfuncties en gegevensbronnen beheren nadat ze zijn gemaakt.

Preview-beperkingen

Op dit moment werkt de detectie van wijzigingen bijhouden en verwijderen niet als de datum of tijdstempel uniform is voor alle rijen. Deze beperking is een bekend probleem dat moet worden opgelost in een update van de preview. Voeg pas een vaardighedenset toe aan de MySQL-indexeerfunctie als dit probleem is opgelost.

De preview biedt geen ondersteuning voor geometrietypen en blobs.

Zoals vermeld, is er geen portalondersteuning voor het maken van indexeerfuncties, maar een MySQL-indexeerfunctie en gegevensbron kunnen in de portal worden beheerd zodra deze bestaan. U kunt bijvoorbeeld de definities bewerken en de indexeerfunctie opnieuw instellen, uitvoeren of plannen.

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. De gegevensbron wordt gedefinieerd als een onafhankelijke resource, zodat deze kan worden gebruikt door meerdere indexeerfuncties.

Gegevensbron maken of bijwerken specificeert de definitie. Zorg ervoor dat u een preview-REST API-versie (2020-06-30-Preview of hoger) gebruikt bij het maken van de gegevensbron.

{   
    "name" : "hotel-mysql-ds",
    "description" : "[Description of MySQL data source]",
    "type" : "mysql",
    "credentials" : { 
        "connectionString" : 
            "Server=[MySQLServerName].MySQL.database.azure.com; Port=3306; Database=[DatabaseName]; Uid=[UserName]; Pwd=[Password]; SslMode=Preferred;" 
    },
    "container" : { 
        "name" : "[TableName]" 
    },
    "dataChangeDetectionPolicy" : { 
        "@odata.type": "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName": "[HighWaterMarkColumn]"
    }
}

Belangrijkste punten:

  • Ingesteld type op "mysql" (vereist).

  • Ingesteld credentials op een ADO.NET verbindingsreeks. U vindt verbindingsreeks s in Azure Portal op de pagina Verbinding maken iontekenreeksen voor MySQL.

  • Ingesteld container op de naam van de tabel.

  • Stel dataChangeDetectionPolicy in of gegevens vluchtig zijn en u wilt dat de indexeerfunctie alleen de nieuwe en bijgewerkte items bij volgende uitvoeringen ophaalt.

  • Stel dataDeletionDetectionPolicy in of u zoekdocumenten uit een zoekindex wilt verwijderen wanneer het bronitem wordt verwijderd.

Een index maken

Met index maken of bijwerken wordt het indexschema opgegeven:

{
    "name" : "hotels-mysql-ix",
    "fields": [
        { "name": "ID", "type": "Edm.String", "key": true, "searchable": false },
        { "name": "HotelName", "type": "Edm.String", "searchable": true, "filterable": false },
        { "name": "Category", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true  },
        { "name": "City", "type": "Edm.String", "searchable": false, "filterable": true, "sortable": true },
        { "name": "Description", "type": "Edm.String", "searchable": false, "filterable": false, "sortable": false  }     
    ]
}

Als de primaire sleutel in de brontabel overeenkomt met de documentsleutel (in dit geval 'ID'),importeert de indexeerfunctie de primaire sleutel als de documentsleutel.

Toewijzingsgegevenstypen

De volgende tabel wijst de MySQL-database toe aan Azure AI Search-equivalenten. Zie Ondersteunde gegevenstypen (Azure AI Search) voor meer informatie.

Notitie

De preview biedt geen ondersteuning voor geometrietypen en blobs.

MySQL-gegevenstypen Azure AI Search-veldtypen
bool, boolean Edm.Boolean, Edm.String
tinyint, , smallintmediumint, int, , , integeryear Edm.Int32, Edm.Int64, Edm.String
bigint Edm.Int64, Edm.String
float, , doublereal Edm.Double, Edm.String
date, , datetimetimestamp Edm.DateTimeOffset, Edm.String
char, , tinytextvarchar, mediumtext, , text, longtext, setenumtime Edm.String
niet-ondertekende numerieke gegevens, serieel, decimaal, dec, bit, blob, binair, geometrie N.v.t.

De MySQL-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:

{
    "name" : "hotels-mysql-idxr",
    "dataSourceName" : "hotels-mysql-ds",
    "targetIndexName" : "hotels-mysql-ix",
    "disabled": null,
    "schedule": null,
    "parameters": {
        "batchSize": null,
        "maxFailedItems": null,
        "maxFailedItemsPerBatch": null,
        "base64EncodeKeys": null,
        "configuration": { }
        },
    "fieldMappings" : [ ],
    "encryptionKey": null
}

Belangrijkste punten:

De status van de indexeerfunctie controleren

Verzend een Get Indexer Status-aanvraag om de uitvoering van de indexeerfunctie te controleren:

GET https://myservice.search.windows.net/indexers/myindexer/status?api-version=2023-11-01
  Content-Type: application/json  
  api-key: [admin key]

Het antwoord bevat de status en het aantal verwerkte items. Het moet er ongeveer uitzien als in het volgende voorbeeld:

{
    "status":"running",
    "lastResult": {
        "status":"success",
        "errorMessage":null,
        "startTime":"2024-02-21T00:23:24.957Z",
        "endTime":"2024-02-21T00:36:47.752Z",
        "errors":[],
        "itemsProcessed":1599501,
        "itemsFailed":0,
        "initialTrackingState":null,
        "finalTrackingState":null
    },
    "executionHistory":
    [
        {
            "status":"success",
            "errorMessage":null,
            "startTime":"2024-02-21T00:23:24.957Z",
            "endTime":"2024-02-21T00:36:47.752Z",
            "errors":[],
            "itemsProcessed":1599501,
            "itemsFailed":0,
            "initialTrackingState":null,
            "finalTrackingState":null
        },
        ... earlier history items
    ]
}

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 en gewijzigde rijen indexeren

Zodra een indexeerfunctie een zoekindex volledig heeft ingevuld, wilt u mogelijk dat de volgende indexeerfunctie alleen de nieuwe en gewijzigde rijen in uw database incrementeel indexeert.

Als u incrementele indexering wilt inschakelen, stelt u de dataChangeDetectionPolicy eigenschap in uw gegevensbrondefinitie in. Deze eigenschap vertelt de indexeerfunctie welk mechanisme voor het bijhouden van wijzigingen wordt gebruikt voor uw gegevens.

Voor Indexeerfuncties van Azure Database for MySQL is het enige ondersteunde beleid het HighWaterMarkChangeDetectionPolicy.

Het wijzigingsdetectiebeleid van een indexeerfunctie is afhankelijk van een kolom met hoge watermarkeringen die de rijversie vastlegt, of de datum en tijd waarop een rij voor het laatst is bijgewerkt. Het is vaak een DATE, DATETIMEof TIMESTAMP kolom met een granulariteit die voldoende is om te voldoen aan de vereisten van een kolom met hoge watermarkeringen.

In uw MySQL-database moet de kolom met hoge watermarkeringen voldoen aan de volgende vereisten:

  • Alle gegevensinvoegingen moeten een waarde voor de kolom opgeven.
  • 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]

In het volgende voorbeeld ziet u een definitie van een gegevensbron met een wijzigingsdetectiebeleid:

{
    "name" : "[Data source name]",
    "type" : "mysql",
    "credentials" : { "connectionString" : "[connection string]" },
    "container" : { "name" : "[table or view name]" },
    "dataChangeDetectionPolicy" : {
        "@odata.type" : "#Microsoft.Azure.Search.HighWaterMarkChangeDetectionPolicy",
        "highWaterMarkColumnName" : "[last_updated column name]"
    }
}

Belangrijk

Als u een weergave gebruikt, moet u een beleid voor hoge watermarkeringen instellen in de gegevensbron van de indexeerfunctie.

Als de brontabel geen index heeft voor de kolom met hoge watermarkeringen, kunnen er een time-out optreedt voor query's die door de MySQL-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.

Verwijderde rijen indexeren

Wanneer rijen uit de tabel of weergave worden verwijderd, wilt u deze rijen normaal gesproken ook uit de zoekindex verwijderen. Als de rijen echter fysiek uit de tabel worden verwijderd, kan een indexeerfunctie de aanwezigheid van records die niet meer bestaan, afleiden. De oplossing is het gebruik van een techniek voor voorlopig verwijderen 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.

Op basis van een kolom die de verwijderingsstatus biedt, kan een indexeerfunctie worden geconfigureerd om alle zoekdocumenten te verwijderen waarvoor de verwijderingsstatus is ingesteld true. De configuratie-eigenschap die dit gedrag ondersteunt, is een beleid voor het detecteren van gegevensverwijdering, dat als volgt is opgegeven in de definitie 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 tekenreeks moet een tekenreeks zijn. 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 (het geval maakt niet uit).

Volgende stappen

U kunt nu de indexeerfunctie uitvoeren, de status bewaken of de uitvoering van de indexeerfunctie plannen. De volgende artikelen zijn van toepassing op indexeerfuncties die inhoud ophalen uit Azure MySQL: