MongoDB文本索引错误:不支持语言覆盖



我使用的是2.6.1版本。我试图创建一个文本索引,我得到错误:

{
    "connectionId" : 4932,
    "err" : "language override unsupported: en-US",
    "code" : 17262,
    "n" : 0,
    "ok" : 1
}

被搜索的文档有一个值为"en-US"的"language"字段,但它不用于在文本搜索中覆盖语言。我尝试创建文本索引来指定一个不存在的字段("lang");然而,我得到了相同的错误。我能够在2.6.0版本上创建索引。是否有一种方法来创建文本索引和忽略language_override字段?

下面是我在2.6.0上使用的工作命令(在2.6.1上不起作用):

db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" })

下面是我在2.6.1中尝试指定另一个不存在的language_override字段的命令:

db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" }, { language_override: "lang" })

提前感谢!

解决方案:

default_languagelanguage_override设置为相同的文字值(在您的示例中为"en")。

How I got here…

我遇到了同样的问题,也是在Mongo 2.6.1上。

在我的情况下,我创建了一个索引,language_override指向一个语言字段,其中已经有不支持值的文档(例如:'ar' -阿拉伯语)。

我是这样创建索引的:

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

我希望当language_override值不受支持时,它会回落到default_language,但显然不是。这是Mongo说的:

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

很好,索引没有创建但我应该可以在没有language_override的情况下创建它?错误-即使我不再指定language_override , mongo也会给我相同的错误

创建索引的失败尝试似乎留下了索引的一些坏版本,没有出现在任何地方,所以我不能删除它(它没有出现在db.users.getIndexes()中,并且按名称删除它不起作用)。

最后,我设法通过将language_override设置为文字值'en'来修复索引,如下所示:
db.users.ensureIndex({ 
  "displayName": "text", 
  "about": "text", 
  "email": "text" 
}, { 
  "name": "users_full_text", 
  "default_language": "en",
  "language_override": "en" 
});  

…Mongo的回复:

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

欢呼。

值"en-US"作为文本索引语言根据文档页面http://docs.mongodb.org/manual/reference/text-search-languages/#text-search-languages是非法的

MongoDB只接受2个字母的代码或语言的全名。

希望有帮助

最新更新