MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Erro de índice de texto do MongoDB:substituição de idioma não suportada

Solução:


Defina o default_language e language_override para o mesmo valor literal (no seu caso "en").

Como cheguei aqui...


Eu bati o mesmo problema, também no Mongo 2.6.1.

No meu caso eu criei o índice com um language_override apontando para um campo de idioma onde já havia documentos com valores não suportados (por exemplo, 'ar' - árabe).

Veja como eu estava criando o índice:
db.users.ensureIndex({ 
  "displayName": "text", 
  "about": "text", 
  "email": "text" 
}, { 
  "name": "users_full_text", 
  "default_language": "en",
  "language_override": "language"
});

Eu esperava que voltasse para o default_language quando o language_override value não é suportado, mas aparentemente não. Veja o que diz Mongo:
{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 3,
  "ok" : 0,
  "errmsg" : "language override unsupported: ar",
  "code" : 17262
}

OK, tudo bem, então o índice não foi criado, mas eu deveria ser capaz de criá-lo sem o language_override, certo? Errado - o mongo me dá o mesmo erro mesmo que eu não tenha mais o language_override especificado .

A tentativa fracassada de criar o índice parece ter deixado para trás uma versão quebrada do índice que não aparece em nenhum lugar, então não posso soltá-lo (ele não aparece em db.users.getIndexes() e soltá-lo pelo nome não funciona).

No final, consegui corrigir o índice definindo o language_override para o valor literal 'en', assim:
db.users.ensureIndex({ 
  "displayName": "text", 
  "about": "text", 
  "email": "text" 
}, { 
  "name": "users_full_text", 
  "default_language": "en",
  "language_override": "en" 
});  

... ao que Mongo responde:
{
  "createdCollectionAutomatically" : false,
  "numIndexesBefore" : 3,
  "numIndexesAfter" : 4,
  "ok" : 1
}

Viva.