आपकी सुझाई गई संरचना में समस्या:
{
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 वापस (संदर्भ) कीवर्ड/मेटाडेटा तालिका से लिंक करता है - जाहिर है, व्यवहार में, _ids "_id" जैसा दिखेगा:"519817e508a16b447c00020e", लेकिन यह केवल पठनीयता के लिए है। अब आप अपने क्वेरी प्रकारों के आधार पर कीवर्ड_आईडी, डोमेन और href पर एक साथ या अलग-अलग इंडेक्स कर सकते हैं और आपको index key pattern too large error
नहीं मिलेगी। और आपको लौटाए गए संपूर्ण सरणी के बजाय केवल एक मिलान करने वाला दस्तावेज़ मिलेगा।
मैं पूरी तरह से स्पष्ट नहीं हूं कि आपको अस्पष्ट/रेगेक्स शैली खोजों की आवश्यकता कहां है और क्या आप मेटाडेटा या सिर्फ href और डोमेन खोज रहे होंगे, लेकिन मुझे लगता है कि यह संरचना इंडेक्सिंग पर अधिकतम किए बिना इंडेक्सिंग के बारे में सोचना शुरू करने का एक क्लीनर तरीका होना चाहिए, पहले जैसा। यह आपको आपके क्वेरी पैटर्न के आधार पर, सामान्य इंडेक्स पर खोज को टेक्स्ट इंडेक्स के साथ संयोजित करने की भी अनुमति देगा।
आपको यह उत्तर मिल सकता है MongoDB संबंध:एम्बेड या संदर्भ? दस्तावेज़ संरचना पर विचार करते समय उपयोगी।