sql >> Databáze >  >> NoSQL >> MongoDB

Mongodb textové vyhledávání více polí

Koncept „textového vyhledávání“ v mongodb takto nefunguje. Místo toho je zde koncept, že definujete "více polí" ve svém "textovém indexu" a stačí vyhledat výrazy.

Řekněme, že máte „věci“ jako toto:

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

Pak se rozhodnu vytvořit textový index takto:

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

Poté vyhledám pomocí $text :

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

Což dává výsledky:

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

Který "oba" vyhledává ve všech polích zadaných v indexu a také bere v úvahu dodatečnou "váhu" přidanou poli "předměstí" v tomto případě, aby bylo ještě populárnější.

Nepoužíváte tedy další podmínky ve výrazech, ale vložíte „všechny“ výrazy do „jednoho“ textového řetězce dotazu pro vyhledávání ve více polích.



  1. Ukládání null versus neukládání klíče vůbec v MongoDB

  2. Problémy s instalací Mongodb na Ubuntu 20.04

  3. mongodb více agregací v jedné operaci

  4. Líné načítání/Více posouvání dat v Mongoose/Nodejs