Delen via


Zoeken en query's uitvoeren met tekstindexen in Azure Cosmos DB voor MongoDB vCore

VAN TOEPASSING OP: MongoDB vCore

Een van de belangrijkste functies die Azure Cosmos DB voor MongoDB vCore 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 Cosmos DB voor MongoDB 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.

Vereisten

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 Cosmos DB - A Game Changer",
  "content": "Azure Cosmos DB 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" })
    

    Notitie

    Hoewel u slechts één tekstindex per verzameling kunt definiëren, kunt u met Azure Cosmos DB voor MongoDB vCore 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 als content de title velden.

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

Opties voor tekstindex configureren

Tekstindexen in Azure Cosmos DB voor MongoDB 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 als content de title velden met ondersteuning voor 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 Cosmos DB voor MongoDB vCore 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 als content de title 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 } }
    )
    

    Notitie

    Wanneer een client een zoekquery voor tekst uitvoert met de term 'Cosmos DB', 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', waarbij het veld 'titel' hoger wordt weergegeven 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 komt overeen met de tekstindex om relevante documenten te vinden.

  1. Voer een tekstzoekopdracht uit voor de woordgroep Cosmos DB.

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

    db.products.find(
        { $text: { $search: "Cosmos DB" } },
        { 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.
  • Tekstindexen ondersteunen eenvoudige zoekopdrachten in tekst en bieden geen geavanceerde zoekmogelijkheden, zoals reguliere expressiezoekopdrachten.
  • 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