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

Uma pesquisa $text pode realizar uma correspondência parcial


MongoDB $text as pesquisas não suportam correspondência parcial. O MongoDB permite consultas de pesquisa de texto em conteúdo de string com suporte para diferenciação de maiúsculas e minúsculas, delimitadores, palavras de parada e lematização. E os termos em sua string de pesquisa são, por padrão, com OR.

Tomando seus (muito úteis) exemplos um por um:

PERDÍCIO ÚNICO, PARCIAL
// returns nothing because there is no world word with the value `Crai` in your
// text index and there is no whole word for which `Crai` is a recognised stem
db.submissions.find({"$text":{"$search":"\"Crai\""}})

VÁRIOS TERMOS, COMPLETOS
// returns the document because it contains all of these words
// note in the text index Dr. Bob is not a single entry since "." is a delimiter
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bob\""}})

VÁRIOS TERMOS, UM PARCIAL
// returns the document because it contains the whole word "Craig" and it 
// contains the whole word "Dr" 
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})

VÁRIOS TERMOS, AMBOS PARCIAIS
// returns the document because it contains the whole word "Dr"
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})

Tenha em mente que o $search corda é...

Portanto, se pelo menos um termo em seu $search string corresponde, então o MongoDB corresponde a esse documento.

Para verificar esse comportamento, se você editar seu documento alterando Dr. Bob para DrBob as seguintes consultas retornarão não documentos:
db.submissions.find({"$text":{"$search":"\"Craig\" \"Dr. Bo\""}})
db.submissions.find({"$text":{"$search":"\"Crai\" \"Dr. Bo\""}})

Eles agora não retornam correspondências porque Dr não é mais uma palavra inteira em seu índice de texto porque não é seguida pelo . delimitador.