Impossible de créer un index dans mongodb, "clé trop grande pour indexer"
Je suis de la création de l'indice en mongodb avoir 10 millions de documents, mais d'erreur suivant
db.logcollection.ensureIndex({"Module":1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"ok" : 0,
"errmsg" : "Btree::insert: key too large to index, failing play.logcollection.$Module_1 1100 { : \"RezGainUISystem.Net.WebException: The request was aborted: The request was canceled.\r\n at System.Net.ConnectStream.InternalWrite(Boolean async, Byte...\" }",
"code" : 17282
}
S'il vous plaît aidez-moi comment createindex dans mongodb,
source d'informationauteur Sandeep.maurya | 2015-01-06
Vous devez vous connecter pour publier un commentaire.
MongoDB ne pas créer un index sur une collection si l'entrée d'index pour un document existant dépasse la la clé d'index de limite (1024 octets). Vous pouvez cependant créer un index haché ou l'index de texte à la place:
ou
Vous pouvez silencieux ce comportement par le lancement de mongod exemple avec la commande suivante:
ou en exécutant la commande suivante à partir mongoShell
Si vous assuré que votre champ de dépasser la limite que très rarement, alors
une façon de résoudre ce problème est de diviser votre terrain (qui provoque l'index hors de la limite) dans des pièces par longueur en octets < 1 par exemple, pour le champ
val
je voudrais découper en n-uplet de champsval_1
,val_2
et ainsi de suite. Mongo stocke le texte en utf-8 valide valeurs. Cela signifie que vous avez besoin d'une fonction qui permet de diviser des chaînes utf-8 correctement.Ensuite, vous pouvez définir votre index composé:
ou plusieurs index pour chaque
val_i
:Dans tous les autres cas, utilisez soit de hachage ou texte index.
Que différentes personnes a souligné dans les réponses, l'erreur
key too large to index
signifie que vous tentez de créer un index sur le champ ou dans les champs qui dépasse 1024 octets de longueur.En ASCII termes, 1024 octets généralement se traduit par environ 1024 caractères.
Il est pas de solution pour cela, car c'est une limite intrinsèque définie par MongoDB comme mentionné dans MongoDB les Limites et les Seuils de page:
Tournant sur le
failIndexKeyTooLong
erreur n'est pas une solution, comme mentionné dans le paramètres du serveur de la page de manuel:Ce que cette phrase signifie que le document concerné sera pas être inclus dans l'index, et peut-être manquant dans les résultats de la requête.
Par exemple:
En forçant MongoDB pour ignorer la
failIndexKeyTooLong
erreur de la dernière requête ne contient pas le document concerné (c'est à dire le document avec_id: 2
est manquant dans le résultat), ainsi, la requête a abouti à un mauvais jeu de résultats.