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

Mongodb tekstsøgning i flere felter

"Tekstsøgning"-konceptet i mongodb fungerer ikke sådan. I stedet er konceptet her, at du definerer "flere felter" i dit "tekstindeks" og søg bare efter termerne.

Lad os sige, at du har "ting" som dette:

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

Så beslutter jeg mig for at oprette et tekstindeks som dette:

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

Så laver jeg en søgning ved hjælp af $text :

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

Hvilket giver resultaterne:

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

Hvilket "begge" søger i alle felter, der er angivet i indekset, og også betragter den ekstra "vægt" som givet til "forstads"-feltet i dette tilfælde for at gøre det til en endnu mere populær placering.

Så du bruger ikke yderligere betingelser i termer, du sætter "alle" termerne i "én" tekstforespørgselsstrengen for at søge i flere felter.



  1. Redis Key udløbsmeddelelse med Jedis

  2. Hvor er mongoimport installeret på Mac OS X

  3. Sådan gør du:Administrer HBase-data via Hue

  4. Er der en database agnostisk nosql framework til .NET?