MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb-Textsuche in mehreren Feldern

Das Konzept der "Textsuche" in mongodb funktioniert so nicht. Stattdessen ist das Konzept hier, dass Sie "mehrere Felder" in Ihrem "Textindex" definieren. und suchen Sie einfach nach den Begriffen.

Nehmen wir an, Sie haben "Zeug" wie dieses:

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

Dann beschließe ich, einen Textindex wie diesen zu erstellen:

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

Dann mache ich eine Suche mit $text :

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

Was die Ergebnisse liefert:

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

Welches "beide" alle im Index angegebenen Felder durchsucht und in diesem Fall auch das zusätzliche "Gewicht" berücksichtigt, das dem Feld "Vorort" gegeben wird, um es zu einem noch populäreren Ranking zu machen.

Sie verwenden also keine zusätzlichen Bedingungen in Begriffen, sondern fügen „alle“ Begriffe in die „eine“ Textabfragezeichenfolge ein, um in mehreren Feldern zu suchen.