MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb - Index de texte multiple :Modèle de clé d'index trop grand, code d'erreur 67

Le problème avec votre structure suggérée :

{
 keyword" : "Just an example query", 
 "rankings" :
    [{"rank" : 1, "domain" : "example1.com", "href" : "example1.com"},
     ...{ "rank" : 99, "domain" : "example99.com", "href" : "example99.com“}
 ]}
}

Est-ce bien que vous puissiez maintenant le faire

db.ranking.ensureIndex({"rankings.href":"text", "rankings.domain":"text"}) 

puis exécutez des requêtes telles que :

db.ranking.find({$text:{$search:"example1"}});

cela renverra maintenant le document de tableau entier où l'élément de tableau est mis en correspondance.

Vous voudrez peut-être envisager de référencer afin que chaque résultat de classement soit un document distinct et que les mots-clés et autres métadonnées soient référencés, pour éviter de répéter beaucoup d'informations.

Donc, vous avez un document de mots-clés/métadonnées comme :

{_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"}

puis un document de résultats comme :

{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"}}

où keyword_id renvoie vers (références) la table de mots-clés/métadonnées -- évidemment, dans la pratique, les _ids ressembleront à "_id":"519817e508a16b447c00020e", mais c'est juste pour la lisibilité. Vous pouvez maintenant indexer sur keyword_id, domain et href, ensemble ou séparément, selon vos types de requête et vous n'obtiendrez pas l'erreur index key pattern too large error et vous n'obtiendrez qu'un seul document correspondant plutôt qu'un tableau complet renvoyé.

Je ne sais pas exactement où vous avez besoin de recherches de style flou/regex et si vous allez rechercher des métadonnées ou simplement href et domaine, mais je pense que cette structure devrait être une façon plus propre de commencer à penser à l'indexation, sans maximiser les index, comme avant. Cela vous permettra également de combiner des recherches sur des index normaux avec des index de texte, en fonction de votre modèle de requête.

Vous pourriez trouver cette réponse Relations MongoDB :intégration ou référence ? utile lorsque vous considérez la structure de votre document.