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.