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.