Търсенето на текст в MongoDB използва библиотеката на Snowball stemming за намаляване на думите до очаквана коренна форма (или основа ) въз основа на общи езикови правила. Алгоритмичното произтичане осигурява бързо редуциране, но езиците имат изключения (като неправилни или противоречиви модели на спрежение на глаголи), които могат да повлияят на точността. Въведение в Snowball включва добър преглед на някои от ограниченията на алгоритмичното произтичане.
Вашият пример за walking
води до walking
и съответства според очакванията.
Въпреки това, вашият пример за trekking
води до trekk
така че не съвпада с ключовата ви дума за търсене на trek
.
Можете да потвърдите това, като обясните заявката си и прегледате parsedTextQuery
информация, която показва използваните произволни думи за търсене:
db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
"terms" : [
"trekk"
],
"negatedTerms" : [ ],
"phrases" : [ ],
"negatedPhrases" : [ ]
}
Можете също да проверите очакваното произтичане на снежна топка, като използвате онлайн демонстрация на снежна топка или като намерите библиотека на Snowball за предпочитания от вас език за програмиране.
За да заобиколите изключения, които обикновено могат да повлияят на вашия случай на употреба, можете да помислите за добавяне на друго поле към вашия текстов индекс с ключови думи, които да повлияят на резултатите от търсенето. За този пример бихте добавили trek
като ключова дума, така че събитието да бъде описано като trekking
също съвпада в резултатите от вашето търсене.
Има и други подходи за по-точна флексия, които обикновено се наричат лематизация . Алгоритмите за лематизация са по-сложни и започват да се насочват към домейна на обработка на естествен език . Има много набори от инструменти с отворен код (и комерсиални), които можете да използвате, ако искате да приложите по-разширено текстово търсене във вашето приложение, но те са извън текущия обхват на функцията за текстово търсене на MongoDB.