MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come funziona la ricerca di $testo di MongoDB?

La ricerca di testo MongoDB utilizza la libreria di stemming Snowball per ridurre le parole a una forma radice prevista (o radice ) sulla base di regole linguistiche comuni. La derivazione algoritmica fornisce una rapida riduzione, ma le lingue hanno eccezioni (come modelli di coniugazione verbale irregolari o contraddittori) che possono influire sull'accuratezza. L'Introduzione alla palla di neve include una buona panoramica di alcuni dei limiti dello stemming algoritmico.

Il tuo esempio di walking deriva da walking e corrisponde come previsto.

Tuttavia, il tuo esempio di trekking deriva da trekk quindi non corrisponde alla tua parola chiave di ricerca di trek .

Puoi confermarlo spiegando la tua richiesta e rivedendo parsedTextQuery informazioni che mostrano i termini di ricerca derivati ​​utilizzati:

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

Puoi anche controllare la deriva prevista di Snowball utilizzando la Demo Snowball online o trovando una libreria Snowball per il tuo linguaggio di programmazione preferito.

Per aggirare le eccezioni che potrebbero incidere comunemente sul tuo caso d'uso, potresti considerare di aggiungere un altro campo al tuo indice di testo con parole chiave per influenzare i risultati della ricerca. Per questo esempio, dovresti aggiungere trek come parola chiave in modo che l'evento descritto come trekking corrisponde anche nei risultati di ricerca.

Esistono altri approcci per un'inflessione più accurata che sono generalmente indicati come lemmatizzazione . Gli algoritmi di lemmatizzazione sono più complessi e iniziano a entrare nel dominio dell'elaborazione del linguaggio naturale . Esistono molti toolkit open source (e commerciali) che potresti essere in grado di sfruttare se desideri implementare una ricerca di testo più avanzata nella tua applicazione, ma questi non rientrano nell'attuale ambito della funzione di ricerca di testo di MongoDB.