Vấn đề với cấu trúc được đề xuất của bạn:
{
keyword" : "Just an example query",
"rankings" :
[{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
]}
}
Đó có phải là mặc dù bây giờ bạn có thể làm được không
db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"})
và sau đó chạy các truy vấn như:
db.ranking.find({$text:{$search:"example1"}});
điều này bây giờ sẽ trả về toàn bộ tài liệu mảng nơi phần tử mảng được so khớp.
Bạn có thể muốn xem xét việc tham khảo để mỗi kết quả xếp hạng là một tài liệu riêng biệt và các từ khóa và dữ liệu meta khác được tham chiếu, để tránh lặp lại nhiều thông tin.
Vì vậy, bạn có một tài liệu từ khóa / siêu dữ liệu như:
{_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"}
và sau đó là tài liệu kết quả như:
{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"}}
trong đó keyword_id liên kết trở lại (tham chiếu) bảng từ khóa / siêu dữ liệu - rõ ràng, trên thực tế, _id sẽ trông giống như "_id":"519817e508a16b447c00020e", nhưng đây chỉ là để dễ đọc. Giờ đây, bạn có thể lập chỉ mục trên keyword_id, miền và href, cùng nhau hoặc riêng biệt, tùy thuộc vào loại truy vấn của bạn và bạn sẽ không gặp lỗi index key pattern too large error
và bạn sẽ chỉ nhận được một tài liệu phù hợp duy nhất chứ không phải trả về toàn bộ mảng.
Tôi không hoàn toàn rõ ràng về nơi bạn cần tìm kiếm kiểu mờ / regex và liệu bạn sẽ tìm kiếm siêu dữ liệu hay chỉ href và miền, nhưng tôi nghĩ cấu trúc này nên là một cách rõ ràng hơn để bắt đầu suy nghĩ về lập chỉ mục, mà không cần tối đa chỉ mục, như trước. Nó cũng sẽ cho phép bạn kết hợp các tìm thấy trên các chỉ mục bình thường với các chỉ mục văn bản, tùy thuộc vào mẫu truy vấn của bạn.
Bạn có thể tìm thấy câu trả lời này Mối quan hệ MongoDB:nhúng hay tham chiếu? hữu ích khi xem xét bạn lập tài liệu.