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

Erreur d'index de texte MongoDB :le remplacement de la langue n'est pas pris en charge

Solution :

Définissez la default_language et language_override à la même valeur littérale (dans votre cas "en").

Comment je suis arrivé ici...

J'ai rencontré le même problème, également sur Mongo 2.6.1.

Dans mon cas, j'ai créé l'index avec un language_override pointant vers un champ de langue où il y avait déjà des documents avec des valeurs non prises en charge (par exemple, 'ar' - arabe).

Voici comment j'ai créé l'index :

db.users.ensureIndex({ 
  "displayName": "text", 
  "about": "text", 
  "email": "text" 
}, { 
  "name": "users_full_text", 
  "default_language": "en",
  "language_override": "language"
});

J'espérais qu'il reviendrait au default_language lorsque le language_override la valeur n'est pas prise en charge, mais apparemment pas. Voici ce que dit Mongo :

{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 3,
  "ok" : 0,
  "errmsg" : "language override unsupported: ar",
  "code" : 17262
}

OK, très bien, donc l'index n'a pas été créé mais je devrais pouvoir le créer sans le language_override, n'est-ce pas ? Faux - mongo me donne la même erreur même si je n'ai plus spécifié le language_override .

La tentative infructueuse de création de l'index semble avoir laissé une version cassée de l'index qui n'apparaît nulle part, donc je ne peux pas la supprimer (elle n'apparaît pas dans db.users.getIndexes() et le supprimer par son nom ne fonctionne pas).

Au final, j'ai réussi à corriger l'index en définissant le language_override à la valeur littérale 'en', comme ceci :

db.users.ensureIndex({ 
  "displayName": "text", 
  "about": "text", 
  "email": "text" 
}, { 
  "name": "users_full_text", 
  "default_language": "en",
  "language_override": "en" 
});  

... auquel Mongo répond :

{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 3,
  "numIndexesAfter" : 4,
  "ok" : 1
}

Hourra.