MongoDB tekst zoeken maakt gebruik van de Snowball stambibliotheek om woorden te reduceren tot een verwachte stamvorm (of stam ) op basis van gemeenschappelijke taalregels. Algoritmische stammen zorgen voor een snelle reductie, maar talen hebben uitzonderingen (zoals onregelmatige of tegenstrijdige werkwoordvervoegingspatronen) die de nauwkeurigheid kunnen beïnvloeden. De Sneeuwbal-introductie bevat een goed overzicht van enkele van de beperkingen van algoritmische stemming.
Jouw voorbeeld van walking
komt voort uit walking
en komt overeen zoals verwacht.
Uw voorbeeld van trekking
stamt af van trekk
komt dus niet overeen met uw zoekwoord trek
.
U kunt dit bevestigen door uw vraag uit te leggen en de parsedTextQuery
. te bekijken informatie die de gebruikte zoektermen laat zien:
db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
"terms" : [
"trekk"
],
"negatedTerms" : [ ],
"phrases" : [ ],
"negatedPhrases" : [ ]
}
U kunt ook de verwachte sneeuwbaleffecten controleren met behulp van de online Sneeuwbaldemo of door een Snowball-bibliotheek te vinden voor uw favoriete programmeertaal.
Om uitzonderingen te omzeilen die vaak van invloed kunnen zijn op uw gebruiksscenario, kunt u overwegen een ander veld aan uw tekstindex toe te voegen met trefwoorden om de zoekresultaten te beïnvloeden. Voor dit voorbeeld zou je trek
. toevoegen als een trefwoord zodat het evenement beschreven als trekking
komt ook overeen in uw zoekresultaten.
Er zijn andere benaderingen voor nauwkeurigere verbuiging die over het algemeen worden aangeduid als lemmatisatie . Lemmatiseringsalgoritmen zijn complexer en gaan naar het domein van natuurlijke taalverwerking . Er zijn veel open source (en commerciële) toolkits die u wellicht kunt gebruiken als u geavanceerdere tekstzoekopdrachten in uw toepassing wilt implementeren, maar deze vallen buiten het huidige bereik van de MongoDB-tekstzoekfunctie.