sql >> Database >  >> NoSQL >> MongoDB

Mongodb-tekst zoeken in meerdere velden

Het concept "tekst zoeken" in mongodb werkt niet zo. In plaats daarvan is het concept hier dat u "meerdere velden" definieert in uw "text index" en zoek gewoon naar de termen.

Laten we zeggen dat je "dingen" hebt zoals deze:

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

Dan besluit ik om een ​​tekstindex te maken zoals deze:

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

Vervolgens zoek ik met $text :

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

Wat de resultaten geeft:

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

Die "beide" doorzoekt in alle velden die in de index zijn gespecificeerd en ook rekening houdt met het extra "gewicht" dat in dit geval aan het veld "voorstad" wordt gegeven om het een nog populairdere rangschikking te maken.

U gebruikt dus geen extra voorwaarden in termen, u plaatst "alle" termen in de "één" tekstzoekreeks om op meerdere velden te zoeken.



  1. MongoDB-voorvoegsel-jokerteken:fulltext-search ($ tekst) deel vinden met zoekstring

  2. Meteor MongoDB problemen met zoeken / ophalen

  3. Hoe kan ik een nieuw aggregatieraamwerk van Mongodb . testen

  4. Hoe documenten opvragen met behulp van het veld _id in het Java-mongodb-stuurprogramma?