Delen via


Zoeken en query's uitvoeren met tekstindexen in Azure DocumentDB

Een van de belangrijkste functies die Azure DocumentDB biedt, is tekstindexering, waarmee u efficiënt kunt zoeken en query's kunt uitvoeren op gegevens op basis van tekst. De service implementeert tekstindexen van versie 2 . Versie 2 ondersteunt hoofdlettergevoeligheid, maar niet diakritische gevoeligheid.

Tekstindexen in Azure DocumentDB zijn speciale gegevensstructuren die op tekst gebaseerde query's optimaliseren, waardoor ze sneller en efficiënter worden. Ze zijn ontworpen voor het verwerken van tekstuele inhoud, zoals documenten, artikelen, opmerkingen of andere gegevens met veel tekst. Tekstindexen gebruiken technieken zoals tokenisatie, stemming en stopwoorden om een index te maken die de prestaties van zoekopdrachten op basis van tekst verbetert.

Vereiste voorwaarden

  • Een Azure-abonnement

  • Een bestaand Azure DocumentDB-cluster

Een tekstindex definiëren

Laten we voor het gemak een voorbeeld van een blogtoepassing overwegen met de volgende instellingen:

  • Databasenaam: cosmicworks
  • Naam van verzameling: products

In deze voorbeeldtoepassing worden artikelen opgeslagen als documenten met de volgende structuur:

{
  "_id": ObjectId("617a34e7a867530bff1b2346"),
  "title": "Azure DocumentDB - A Game Changer",
  "content": "Azure DocumentDB is a globally distributed, multi-model database service.",
  "author": "John Doe",
  "category": "Technology",
  "published": true
}
  1. Gebruik de createIndex methode met de text optie om een tekstindex in het title veld te maken.

    use cosmicworks;
    
    db.products.createIndex({ title: "text" })
    

    Opmerking

    Hoewel u slechts één tekstindex per verzameling kunt definiëren, kunt u met Azure DocumentDB tekstindexen maken op meerdere velden, zodat u tekstzoekopdrachten kunt uitvoeren in verschillende velden in uw documenten.

  2. Maak desgewenst een index ter ondersteuning van zoeken op zowel de title- als de content-velden.

    db.products.createIndex({ title: "text", content: "text" })
    

Opties voor tekstindex configureren

Tekstindexen in Azure DocumentDB worden geleverd met verschillende opties om hun gedrag aan te passen. U kunt bijvoorbeeld de taal voor tekstanalyse opgeven, gewichten instellen om prioriteit te geven aan bepaalde velden en hoofdlettergevoelige zoekopdrachten configureren. Hier volgt een voorbeeld van het maken van een tekstindex met opties:

  1. Maak een index ter ondersteuning van zoeken op zowel de title als de content velden, met ondersteuning voor de Engelse taal. Wijs ook hogere gewichten toe aan het veld om prioriteit te geven aan het title veld in zoekresultaten.

    db.products.createIndex(
        { title: "text", content: "text" },
        { default_language: "english", weights: { title: 10, content: 5 }, caseSensitive: false }
    )
    

Gewichten in tekstindexen

Wanneer u een tekstindex maakt, kunt u verschillende gewichten toewijzen aan afzonderlijke velden in de index. Deze gewichten vertegenwoordigen het belang of de relevantie van elk veld in de zoekopdracht. Azure DocumentDB berekent een score en toegewezen gewichten voor elk document op basis van de zoektermen bij het uitvoeren van een zoekquery voor tekst. De score vertegenwoordigt de relevantie van het document voor de zoekquery.

  1. Maak een index ter ondersteuning van zoeken op zowel de title als de content velden. Wijs een gewicht van 2 toe aan het veld 'titel' en een gewicht van 1 aan het veld 'inhoud'.

    db.products.createIndex(
    { title: "text", content: "text" },
    { weights: { title: 2, content: 1 } }
    )
    

    Opmerking

    Wanneer een client een zoekquery voor tekst uitvoert met de term 'DocumentDB', wordt de score voor elk document in de verzameling berekend op basis van de aanwezigheid en frequentie van de term in zowel de velden 'titel' als 'inhoud', met een hogere urgentie voor het veld 'titel' vanwege het hogere gewicht.

Een tekstzoekopdracht uitvoeren met behulp van een tekstindex

Zodra de tekstindex is gemaakt, kunt u tekstzoekopdrachten uitvoeren met behulp van de operator 'tekst' in uw query's. De tekstoperator gebruikt een zoektekenreeks en zoekt in de tekstindex om relevante documenten te vinden.

  1. Voer een tekstzoekopdracht uit voor de woordgroep DocumentDB.

    db.products.find(
        { $text: { $search: "DocumentDB" } }
    )
    
  2. Gebruik eventueel de $meta projectieoperator samen met het textScore veld in een query om het gewicht te zien

    db.products.find(
        { $text: { $search: "DocumentDB" } },
        { score: { $meta: "textScore" } }
    )
    

Een tekstindex verwijderen

Als u een tekstindex in MongoDB wilt verwijderen, kunt u de dropIndex() methode in de verzameling gebruiken en de indexsleutel of naam opgeven voor de tekstindex die u wilt verwijderen.

  1. Verwijder een tekstindex door expliciet de sleutel op te geven.

    db.products.dropIndex({ title: "text" })
    
  2. U kunt desgewenst een tekstindex verwijderen door de automatisch gegenereerde unieke naam op te geven.

    db.products.dropIndex("title_text")
    

Beperkingen voor tekstindex

  • Er kan slechts één tekstindex worden gedefinieerd voor een verzameling.
  • Hint() wordt niet ondersteund in combinatie met een query met behulp van $text expressie.
  • Sorteerbewerkingen kunnen de volgorde van de tekstindex in MongoDB niet gebruiken.
  • Tekstindexen kunnen relatief groot zijn en aanzienlijke opslagruimte verbruiken in vergelijking met andere indextypen.

Volgende stap