MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como funciona a pesquisa de $texto do MongoDB?


A pesquisa de texto do MongoDB usa a biblioteca de derivação Snowball para reduzir as palavras a uma forma de raiz esperada (ou raiz ) com base em regras de linguagem comuns. A derivação algorítmica fornece uma redução rápida, mas os idiomas têm exceções (como padrões de conjugação de verbos irregulares ou contraditórios) que podem afetar a precisão. A introdução do Snowball inclui uma boa visão geral de algumas das limitações da derivação algorítmica.

Seu exemplo de walking deriva para walking e corresponde ao esperado.

No entanto, seu exemplo de trekking deriva para trekk portanto, não corresponde à sua palavra-chave de pesquisa de trek .

Você pode confirmar isso explicando sua consulta e revisando o parsedTextQuery informações que mostram os termos de pesquisa derivados usados:
db.events.find({$text: {$search: 'Trekking'} }).explain().queryPlanner.winningPlan.parsedTextQuery
{
​   "terms" : [
​       "trekk"
​   ],
​   "negatedTerms" : [ ],
​   "phrases" : [ ],
​   "negatedPhrases" : [ ]
}

Você também pode verificar o resultado esperado do Snowball usando a Demonstração do Snowball on-line ou encontrando uma biblioteca do Snowball para sua linguagem de programação preferida.

Para contornar exceções que normalmente podem afetar seu caso de uso, considere adicionar outro campo ao seu índice de texto com palavras-chave para influenciar os resultados da pesquisa. Para este exemplo, você adicionaria trek como palavra-chave para que o evento descrito como trekking também corresponde em seus resultados de pesquisa.

Existem outras abordagens para uma flexão mais precisa que geralmente são chamadas de lematização . Os algoritmos de lematização são mais complexos e começam a entrar no domínio do processamento de linguagem natural . Existem muitos kits de ferramentas de código aberto (e comerciais) que você pode aproveitar se quiser implementar uma pesquisa de texto mais avançada em seu aplicativo, mas eles estão fora do escopo atual do recurso de pesquisa de texto do MongoDB.