"Textsökning"-konceptet i mongodb fungerar inte så. Istället är konceptet här att du definierar "flera fält" i ditt "textindex" och sök bara efter termerna.
Låt oss säga att du har "grejer" som det här:
{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne"
}
Sedan bestämmer jag mig för att skapa ett textindex så här:
db.junk.createIndex(
{ "title": "text", "suburb": "text" },
{ "weights": { "title": 10 } }
)
Sedan gör jag en sökning med $text
:
db.junk.find(
{ "$text": { "$search": "Hello World Melbourne" } },
{ "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })
Vilket ger resultatet:
{
"_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
}
Vilket "båda" söker över alla fält som anges i indexet och även betraktar den extra "vikten" som ges till "förorts"-fältet i det här fallet för att göra det till en ännu mer populär rankning.
Så du använder inte ytterligare villkor i termer, du lägger "alla" termer i "en" textfrågesträng för att söka i flera fält.