MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Recherche de texte Mongodb dans plusieurs champs

Le concept de "recherche de texte" dans mongodb ne fonctionne pas comme ça. Au lieu de cela, le concept ici est que vous définissez des "champs multiples" dans votre "index de texte" et recherchez simplement les termes.

Disons que vous avez des "trucs" comme ceci :

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

Ensuite, je décide de créer un index de texte comme celui-ci :

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

Ensuite, je fais une recherche en utilisant $text :

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

Ce qui donne les résultats :

{
    "_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
}

Lequel "les deux" recherche sur tous les champs spécifiés dans l'index et considère également le "poids" supplémentaire attribué au champ "banlieue" dans ce cas pour en faire un classement encore plus populaire.

Ainsi, vous n'utilisez pas de conditions supplémentaires dans les termes, vous placez "tous" les termes dans "une" chaîne de requête de texte pour effectuer une recherche sur plusieurs champs.