sql >> Base de Datos >  >> NoSQL >> MongoDB

Error de índice de texto de MongoDB:no se admite la anulación de idioma

Solución:

Establecer el default_language y language_override al mismo valor literal (en su caso "en").

Cómo llegué aquí...

Me encontré con el mismo problema, también en Mongo 2.6.1.

En mi caso creé el índice con un language_override apuntando a un campo de idioma donde ya había documentos con valores no admitidos (por ejemplo, 'ar' - árabe).

Así es como estaba creando el índice:

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

Esperaba que volviera al default_language cuando el language_override el valor no es compatible, pero aparentemente no. Esto es lo que dice Mongo:

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

De acuerdo, está bien, el índice no se creó, pero debería poder crearlo sin language_override, ¿verdad? Incorrecto:mongo me da el mismo error aunque ya no tengo especificado language_override .

El intento fallido de crear el índice parece haber dejado atrás una versión rota del índice que no aparece en ninguna parte, así que no puedo soltarlo (no aparece en db.users.getIndexes() y colocarlo por nombre no funciona).

Al final logré arreglar el índice configurando language_override al valor literal 'en', así:

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

... a lo que Mongo responde:

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

Hurra.