sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb textsökning i flera fält

"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.



  1. Node Js Hur man laddar ner en fil till minnet utan att skriva filen till systemet eller utan att skapa filen i en katalog

  2. Mongo $i operatörsprestanda

  3. Designa många-till-många-relationer i MongoDB (istället för relationstabeller)

  4. Hur ändrar man replikuppsättningskonfigurationen?