sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur fungerar MongoDB $text-sökning?

MongoDB textsökning använder Snowball stemming-biblioteket för att reducera ord till en förväntad rotform (eller stam ) baserat på vanliga språkregler. Algoritmisk härkomst ger en snabb minskning, men språk har undantag (som oregelbundna eller motstridiga verbböjningsmönster) som kan påverka noggrannheten. Snowball-introduktionen innehåller en bra översikt över några av begränsningarna för algoritmisk stemming.

Ditt exempel på walking kommer till walking och matchar som förväntat.

Men ditt exempel på trekking härrör till trekk så matchar inte ditt sökord för trek .

Du kan bekräfta detta genom att förklara din fråga och granska parsedTextQuery information som visar vilka söktermer som används:

db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
​   "terms" : [
​       "trekk"
​   ],
​   "negatedTerms" : [ ],
​   "phrases" : [ ],
​   "negatedPhrases" : [ ]
}

Du kan också kontrollera förväntad snöbollsuppkomst med hjälp av online Snowball Demo eller genom att hitta ett Snowball-bibliotek för ditt föredragna programmeringsspråk.

För att kringgå undantag som ofta kan påverka ditt användningsfall kan du överväga att lägga till ytterligare ett fält i ditt textindex med nyckelord för att påverka sökresultaten. För det här exemplet skulle du lägga till trek som ett nyckelord så att händelsen beskrivs som trekking matchar även i dina sökresultat.

Det finns andra tillvägagångssätt för mer exakt böjning som vanligtvis kallas lemmatisering . Lemmatiseringsalgoritmer är mer komplexa och börjar gå in på domänen för naturlig språkbehandling . Det finns många verktyg med öppen källkod (och kommersiella) som du kanske kan utnyttja om du vill implementera mer avancerad textsökning i din applikation, men dessa ligger utanför MongoDB:s nuvarande räckvidd för textsökning.




  1. Administratörspanel för Node.js och Mongoose

  2. Hur förhindrar man _t och _v när man infogar i MongoDB?

  3. Mongoose Compound Index Unik + Sparse

  4. söker databasen med mongoose api och nodejs?