MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Textindexfehler:Sprachüberschreibung wird nicht unterstützt

Lösung:

Legen Sie die default_language fest und language_override auf den gleichen Literalwert (in Ihrem Fall "en").

Wie ich hierher gekommen bin...

Ich habe das gleiche Problem, auch auf Mongo 2.6.1.

In meinem Fall habe ich den Index mit einem language_override erstellt Verweis auf ein Sprachfeld, in dem bereits Dokumente mit nicht unterstützten Werten vorhanden waren (z. B. 'ar' - Arabisch).

So habe ich den Index erstellt:

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

Ich hatte gehofft, es würde auf die default_language zurückfallen wenn die language_override Wert wird nicht unterstützt, aber anscheinend nicht. Folgendes sagt Mongo:

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

OK, gut, also wurde der Index nicht erstellt, aber ich sollte in der Lage sein, ihn ohne language_override zu erstellen, richtig? Falsch - Mongo gibt mir den gleichen Fehler, obwohl ich nicht mehr language_override angegeben habe .

Der fehlgeschlagene Versuch, den Index zu erstellen, scheint eine fehlerhafte Version des Index hinterlassen zu haben, die nirgendwo auftaucht, sodass ich sie nicht löschen kann (sie erscheint nicht in db.users.getIndexes() und das Ablegen nach Namen funktioniert nicht).

Am Ende habe ich es geschafft, den Index zu reparieren, indem ich language_override gesetzt habe zum Literalwert 'en', wie folgt:

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

... worauf Mongo antwortet:

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

Hurra.