MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Il testo di Mongodb ricerca più campi

Il concetto di "ricerca testuale" in mongodb non funziona in questo modo. Invece il concetto qui è che tu definisci "campi multipli" nel tuo "indice di testo" e cerca i termini.

Diciamo che hai "cose" come questa:

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

Quindi decido di creare un indice di testo come questo:

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

Quindi eseguo una ricerca utilizzando $text :

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

Che dà i risultati:

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

Che "entrambi" ricerca su tutti i campi specificati nell'indice e considera anche il "peso" aggiuntivo dato al campo "periferia" in questo caso per renderlo un ranking ancora più popolare.

Quindi non usi condizioni aggiuntive nei termini, inserisci "tutti" i termini nella stringa di query di testo "uno" per cercare su più campi.