sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB - Skillnad mellan index på textfält och textindex?

De två indexalternativen är väldigt olika.

  • När du skapar ett vanligt index på ett strängfält indexerar det hela värdet i strängen. Mest användbart för enstaka ordsträngar (som ett användarnamn för inloggningar) där du kan matcha exakt.

  • Ett textindex å andra sidan kommer att tokenisera och stoppa innehållet i fältet. Så det kommer att bryta strängen i enskilda ord eller tokens, och kommer att reducera dem ytterligare till deras stammar så att varianter av samma ord kommer att matcha ("tala" matchar "pratar", "talade" och "pratar" till exempel som "tala" är en stam av alla tre). Mest användbar för sann text (meningar, stycken, etc).

    Textsökning

    Textsökning stöder sökning av stränginnehåll i dokument av en samling. MongoDB tillhandahåller $text operatör för att utföra textsökning i frågor och i aggregeringspipelines.

    Textsökningsprocessen:

    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.
    

    $text operatör kan söka efter ord och fraser. Frågan matchar de fullständiga härstammande orden. Till exempel, om ett dokumentfält innehåller ordet blåbär, kommer en sökning på termen blå inte att matcha dokumentet. En sökning på antingen blåbär eller blåbär kommer dock att matcha.

  • $regex sökningar kan användas med vanliga index på strängfält, för att ge viss mönstermatchning och jokerteckensökning. Inte en särskilt effektiv användare av index men den kommer att använda index där den kan:

    Om det finns ett index för fältet, matchar MongoDB det reguljära uttrycket mot värdena i indexet, vilket kan vara snabbare än en samlingssökning. Ytterligare optimering kan ske om det reguljära uttrycket är ett "prefixuttryck", vilket innebär att alla potentiella matchningar börjar med samma sträng. Detta tillåter MongoDB att konstruera ett "intervall" från det prefixet och endast matcha mot de värden från indexet som faller inom det intervallet.

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

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



  1. Installera MongoDB på Windows

  2. Hur kan jag använda Python för att omvandla MongoDB:s bsondump till JSON?

  3. 5 sätt att få protokollet från ett datum i MongoDB

  4. Hur rensar jag fastnade/inaktuella Resque-arbetare?