Het probleem met uw voorgestelde structuur:
{
keyword" : "Just an example query",
"rankings" :
[{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
]}
}
Is dat, hoewel je dat nu kunt doen
db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"})
en voer vervolgens zoekopdrachten uit zoals:
db.ranking.find({$text:{$search:"example1"}});
dit zal nu het hele array-document retourneren waar het array-element overeenkomt.
U kunt overwegen te verwijzen, zodat elk rangschikkingsresultaat een afzonderlijk document is en naar de trefwoorden en andere metagegevens wordt verwezen, om te voorkomen dat u veel informatie moet herhalen.
U heeft dus een document met trefwoorden/metagegevens zoals:
{_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"}
en dan een resultatendocument zoals:
{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"}}
waar keyword_id teruglinkt naar (referenties) de trefwoord/metadatatabel -- uiteraard zullen de _ids er in de praktijk uitzien als "_id" :"519817e508a16b447c00020e", maar dit is alleen voor de leesbaarheid. U kunt nu indexeren op keyword_id, domain en href, samen of afzonderlijk, afhankelijk van uw zoektypes en u krijgt niet de fout index key pattern too large error
en u krijgt slechts één overeenkomend document terug in plaats van een hele array.
Ik ben niet helemaal duidelijk over waar je fuzzy / regex-achtige zoekopdrachten nodig hebt en of je metadata zoekt of alleen href en domein, maar ik denk dat deze structuur een schonere manier zou moeten zijn om na te denken over indexering, zonder het maximale uit indexen te halen, zoals eerder. Het stelt je ook in staat om vondsten op normale indexen te combineren met tekstindexen, afhankelijk van je zoekpatroon.
Mogelijk vindt u dit antwoord MongoDB-relaties:insluiten of verwijzen? handig bij het overwegen van uw documentstructuur.