sql >> Database >  >> NoSQL >> MongoDB

MongoDB - Verschil tussen index op tekstveld en tekstindex?

De twee indexopties zijn heel verschillend.

  • Wanneer u een reguliere index op een tekenreeksveld maakt, indexeert deze de volledige waarde in de tekenreeks. Meestal handig voor strings van één woord (zoals een gebruikersnaam voor aanmeldingen) waar je precies kunt matchen.

  • Een tekstindex daarentegen zal de inhoud van het veld tokeniseren en tegenhouden. Het zal de string dus opsplitsen in afzonderlijke woorden of tokens, en ze verder reduceren tot hun stammen, zodat varianten van hetzelfde woord overeenkomen ("praten" die bijvoorbeeld overeenkomen met "praten", "praten" en "praten" als "praten" is een stam van alle drie). Vooral handig voor echte tekst (zinnen, alinea's, enz.).

    Tekst zoeken

    Zoeken in tekst ondersteunt het zoeken naar tekenreeksinhoud in documenten van een verzameling. MongoDB levert de $text operator om tekstzoekopdrachten uit te voeren en in aggregatiepijplijnen.

    Het tekstzoekproces:

    tokenizes and stems the search term(s) during both the index creation and the text command execution.
    assigns a score to each document that contains the search term in the indexed fields. The score determines the relevance of a document to a given search query.
    

    De $text operator kan zoeken naar woorden en woordgroepen. De zoekopdracht komt overeen met de volledige stamwoorden. Als een documentveld bijvoorbeeld het woord bosbes bevat, komt een zoekopdracht op de term blauw niet overeen met het document. Een zoekopdracht op bosbessen of bosbessen komt echter overeen.

  • $regex zoekopdrachten kunnen worden gebruikt met reguliere indexen op tekenreeksvelden, en bieden een aantal patroonovereenkomsten en zoeken met jokertekens. Geen erg effectieve gebruiker van indexen, maar het zal indexen gebruiken waar het kan:

    Als er een index voor het veld bestaat, vergelijkt MongoDB de reguliere expressie met de waarden in de index, wat sneller kan zijn dan een verzamelingsscan. Verdere optimalisatie kan plaatsvinden als de reguliere expressie een "prefixexpressie" is, wat betekent dat alle potentiële overeenkomsten met dezelfde tekenreeks beginnen. Hierdoor kan MongoDB een "bereik" maken van dat voorvoegsel en alleen overeenkomen met die waarden uit de index die binnen dat bereik vallen.

http://docs.mongodb.org/manual/core/index-text/

http://docs.mongodb.org/manual/reference/operator/query/regex/



  1. MongoDB - Query's uitvoeren tussen een tijdbereik van uren

  2. Waar is de meteoor MongoDB-database?

  3. mongodb aggregatie sorteren

  4. Wat is MongoDB en hoe werkt het?