sql >> Base de Datos >  >> NoSQL >> MongoDB

Búsqueda de texto Mongodb en múltiples campos

El concepto de "búsqueda de texto" en mongodb no funciona así. En cambio, el concepto aquí es que define "múltiples campos" en su "text index" y simplemente busque los términos.

Digamos que tienes "cosas" como esta:

{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
    "_id" : ObjectId("55ba22594bde97b58133297b"),
    "title" : "Hello world",
    "suburb" : "melbourne"
}

Entonces decido crear un índice de texto como este:

db.junk.createIndex(
   { "title": "text", "suburb": "text" },
   { "weights": {  "title": 10 } }
)

Luego hago una búsqueda usando $text :

db.junk.find(
   { "$text": { "$search": "Hello World Melbourne" } },
   { "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })

Lo que da los 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" busca en todos los campos especificados en el índice y también considera el "peso" adicional dado al campo "suburbio" en este caso para que sea una clasificación aún más popular.

Por lo tanto, no usa condiciones adicionales en los términos, coloca "todos" los términos en la cadena de consulta de texto "uno" para buscar en varios campos.