Проблемът с предложената от вас структура:
{
keyword" : "Just an example query",
"rankings" :
[{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
]}
}
Е, че въпреки че вече можете да го направите
db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"})
и след това изпълнете заявки като:
db.ranking.find({$text:{$search:"example1"}});
това сега ще върне целия документ на масива, където елементът на масива съответства.
Може да помислите за препращане, така че всеки резултат от класирането да е отделен документ и ключовите думи и другите метаданни да се препращат, за да избегнете повтарянето на много информация.
И така, имате документ с ключови думи/метаданни като:
{_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"}
и след това документ с резултати като:
{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"}}
където keyword_id препраща към (препратки) към таблицата с ключови думи/метаданни -- очевидно на практика _id ще изглежда като "_id" :"519817e508a16b447c00020e", но това е само за четливост. Вече можете да индексирате ключови_идентификатор, домейн и href, заедно или поотделно, в зависимост от вашите типове заявки и няма да получите index key pattern too large error
и ще получите само един съвпадащ документ, а не цял масив.
Не съм напълно наясно къде се нуждаете от търсене в размит/регекс стил и дали ще търсите метаданни или само href и домейн, но мисля, че тази структура трябва да бъде по-чист начин да започнете да мислите за индексиране, без да превишавате максимално индексите, по старому. Освен това ще ви позволи да комбинирате намерения в нормални индекси с текстови индекси, в зависимост от модела на вашата заявка.
Може да намерите този отговор MongoDB взаимоотношения:вграждане или справка? полезно при обмисляне на структурата на вашия документ.