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

时间:2014-05-22 18:55:09

标签: mongodb

我使用的是2.6.1版。我正在尝试创建一个文本索引,我收到错误:

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

正在搜索的文档具有“语言”字段,其值为“en-US”,但不会用于覆盖文本搜索中的语言。我试图创建文本索引来指定一个不存在的字段(“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" })

提前致谢!

2 个答案:

答案 0 :(得分:15)

解决方案:

default_languagelanguage_override设置为相同的字面值(在您的情况下" en")。

我是怎么来到这里的......

我也遇到了同样的问题,也是在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"
});

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

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

好的,没问题,所以索引没有创建,但我应该可以在没有language_override的情况下创建它,对吧?错误 - mongo给了我同样的错误,即使我不再指定language_override

创建索引失败的尝试似乎留下了一些没有显示在任何地方的索引的破坏版本,因此我无法删除它(它不会出现在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
}

乌拉。

答案 1 :(得分:3)

价值" en-US"根据文档页面http://docs.mongodb.org/manual/reference/text-search-languages/#text-search-languages

,它是非法的文本索引语言

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

希望有所帮助:)