sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB - Forskel mellem indeks på tekstfelt og tekstindeks?

De to indeksmuligheder er meget forskellige.

  • Når du opretter et almindeligt indeks på et strengfelt, indekserer det hele værdien i strengen. Mest nyttigt til strenge med et enkelt ord (som et brugernavn til logins), hvor du kan matche nøjagtigt.

  • Et tekstindeks på den anden side vil tokenisere og dæmme op for feltets indhold. Så det vil bryde strengen op i individuelle ord eller tokens og vil yderligere reducere dem til deres stammer, så varianter af det samme ord vil matche ("snakke" matcher "taler", "talte" og "taler" for eksempel som "snakke" er en stamme af alle tre). Mest nyttigt til ægte tekst (sætninger, afsnit osv.).

    Tekstsøgning

    Tekstsøgning understøtter søgning efter strengindhold i dokumenter i en samling. MongoDB leverer $text operatør til at udføre tekstsøgning i forespørgsler og i aggregeringspipelines.

    Tekstsøgningsprocessen:

    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øge efter ord og sætninger. Forespørgslen matcher de komplette stammede ord. For eksempel, hvis et dokumentfelt indeholder ordet blåbær, vil en søgning på ordet blå ikke matche dokumentet. En søgning på enten blåbær eller blåbær vil dog matche.

  • $regex søgninger kan bruges med almindelige indekser på strengfelter for at give mønstermatchning og jokertegnssøgning. Ikke en voldsomt effektiv bruger af indekser, men den vil bruge indekser, hvor den kan:

    Hvis der findes et indeks for feltet, så matcher MongoDB det regulære udtryk mod værdierne i indekset, hvilket kan være hurtigere end en samlingsscanning. Yderligere optimering kan forekomme, hvis det regulære udtryk er et "præfiksudtryk", hvilket betyder, at alle potentialmatches starter med den samme streng. Dette gør det muligt for MongoDB at konstruere et "interval" fra det præfiks og kun matche de værdier fra indekset, der falder inden for det interval.

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

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



  1. Hvordan aggregeres efter dato, når et fuldt tidsstempel er givet i aggregeringsramme?

  2. redis forbindelsesfejl i docker container

  3. At finde nøgler, der ikke udløber i Redis

  4. Gendan fra afbrudt forbindelse i redis pub/sub