MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Errore di indice di testo MongoDB:sovrascrittura della lingua non supportata

Soluzione:

Imposta il default_language e language_override allo stesso valore letterale (nel tuo caso "en").

Come sono arrivato qui...

Ho riscontrato lo stesso problema, anche su Mongo 2.6.1.

Nel mio caso ho creato l'indice con un language_override che punta a un campo della lingua in cui erano già presenti documenti con valori non supportati (ad es. 'ar' - arabo).

Ecco come stavo creando l'indice:

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

Speravo che tornasse al default_language quando language_override il valore non è supportato, ma a quanto pare no. Ecco cosa dice Mongo:

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

OK, bene, quindi l'indice non è stato creato ma dovrei essere in grado di crearlo senza language_override, giusto? Sbagliato - mongo mi dà lo stesso errore anche se non ho più il language_override specificato .

Il tentativo fallito di creare l'indice sembra aver lasciato una versione non funzionante dell'indice che non viene visualizzata da nessuna parte, quindi non posso eliminarla (non appare in db.users.getIndexes() e rilasciarlo per nome non funziona).

Alla fine sono riuscito a correggere l'indice impostando il language_override al valore letterale 'en', in questo modo:

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

... a cui Mongo risponde:

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

Evviva.