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.