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

Mongodb – Vícetextový index:Vzor klíče indexu je příliš velký, kód chyby 67

Problém s vámi navrhovanou strukturou:

{
 keyword" : "Just an example query", 
 "rankings" :
    [{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
     ...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
 ]}
}

I když to nyní můžete udělat

db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"}) 

a poté spusťte dotazy jako:

db.ranking.find({$text:{$search:"example1"}});

to nyní vrátí celý dokument pole, ve kterém se prvek pole shoduje.

Možná budete chtít zvážit odkazování, aby každý výsledek hodnocení byl samostatný dokument a odkazovalo se na klíčová slova a další metadata, abyste se vyhnuli opakování mnoha informací.

Takže máte dokument klíčových slov/metadat jako:

{_id:1, "keyword":"example query", "querydate": date, "other stuff":"other meta data"},
{_id:2, "keyword":"example query 2", "querydate": date, "other stuff":"other meta data 2"}

a pak dokument s výsledky jako:

{keyword_id:1, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
... keyword_id:1, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"},
 keyword_id:2, {"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
 ...keyword_id:2, {"rank" : 99, "domain" : "example99.com", "href" : "example99.com"}}

kde keyword_id odkazuje zpět na (odkazy) na tabulku klíčových slov/metadat -- v praxi budou _ids samozřejmě vypadat jako "_id" :"519817e508a16b447c00020e", ale to je jen pro čitelnost. Nyní můžete indexovat podle keyword_id, domain a href, buď společně nebo odděleně, v závislosti na typu dotazu a neobjeví se index key pattern too large error a namísto vráceného celého pole získáte pouze jeden odpovídající dokument.

Není mi úplně jasné, kde potřebujete hledání ve stylu fuzzy/regex a zda budete hledat metadata nebo jen href a doménu, ale myslím si, že tato struktura by měla být čistším způsobem, jak začít přemýšlet o indexování, aniž byste museli na maximum indexy, jako dříve. Umožní vám také kombinovat hledání na normálních indexech s textovými indexy v závislosti na vašem vzoru dotazu.

Možná najdete tuto odpověď Vztahy MongoDB:vložit nebo odkazovat? užitečné při zvažování struktury vašeho dokumentu.



  1. Vlastní úložný systém pro GridFS (MongoDB)?

  2. Konektor dřezu Kafka:Nejsou přiřazeny žádné úkoly ani po restartu

  3. Vrátit zpět convertToCapped do kolekce

  4. Kolekce Meteor.js je na klientovi prázdná