MongoDB-tekstsøgning bruger Snowball-stammebiblioteket at reducere ord til en forventet rodform (eller stamme ) baseret på fælles sprogregler. Algoritmisk ordstamming giver en hurtig reduktion, men sprog har undtagelser (såsom uregelmæssige eller modstridende verbøjningsmønstre), der kan påvirke nøjagtigheden. Snowball-introduktionen indeholder et godt overblik over nogle af begrænsningerne ved algoritmisk stemming.
Dit eksempel på walking
stammer fra walking
og matcher som forventet.
Men dit eksempel på trekking
stammer fra trekk
så matcher ikke dit søgeord for trek
.
Du kan bekræfte dette ved at forklare din forespørgsel og gennemgå parsedTextQuery
information, der viser de anvendte stammende søgetermer:
db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
"terms" : [
"trekk"
],
"negatedTerms" : [ ],
"phrases" : [ ],
"negatedPhrases" : [ ]
}
Du kan også tjekke den forventede sneboldafgang ved at bruge online Snebolddemoen eller ved at finde et Snowball-bibliotek til dit foretrukne programmeringssprog.
For at omgå undtagelser, der ofte kan påvirke din use case, kan du overveje at tilføje et andet felt til dit tekstindeks med nøgleord for at påvirke søgeresultaterne. Til dette eksempel vil du tilføje trek
som et nøgleord, så begivenheden beskrives som trekking
matcher også i dine søgeresultater.
Der er andre tilgange til mere præcis bøjning, som generelt omtales som lemmatisering . Lemmatiseringsalgoritmer er mere komplekse og begynder at gå ind i domænet for naturlig sprogbehandling . Der er mange open source (og kommercielle) værktøjssæt, som du muligvis kan bruge, hvis du vil implementere mere avanceret tekstsøgning i din applikation, men disse er uden for det nuværende omfang af MongoDB-tekstsøgefunktionen.