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

Pesquisa de texto Mongodb em vários campos


O conceito de "pesquisa de texto" no mongodb não funciona assim. Em vez disso, o conceito aqui é que você define "múltiplos campos" em seu "índice de texto" e basta pesquisar os termos.

Digamos que você tenha "coisas" assim:
{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
    "_id" : ObjectId("55ba22594bde97b58133297b"),
    "title" : "Hello world",
    "suburb" : "melbourne"
}

Então eu decido criar um índice de texto como este:
db.junk.createIndex(
   { "title": "text", "suburb": "text" },
   { "weights": {  "title": 10 } }
)

Em seguida, faço uma pesquisa usando $text :
db.junk.find(
   { "$text": { "$search": "Hello World Melbourne" } },
   { "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })

O que dá os resultados:
{
    "_id" : ObjectId("55ba22594bde97b58133297b"),
    "title" : "Hello world",
    "suburb" : "melbourne",
    "score" : 11.5
},
{
    "_id" : ObjectId("55ba22414bde97b58133297a"),
    "title" : "Hello world",
    "score" : 1.5
},
{
    "_id" : ObjectId("55ba22294bde97b581332979"),
    "title" : "Hello there",
    "score" : 1
}

Que "ambos" pesquisa em todos os campos especificados no índice e também considera o "peso" adicional dado ao campo "subúrbio" neste caso para torná-lo um ranking ainda mais popular.

Então você não usa condições adicionais em termos, você coloca "todos" os termos na string de consulta de texto "um" para pesquisar em vários campos.