我使用的是 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" })
提前致谢!
最佳答案
解决方案:
将 default_language
和 language_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"
});
我希望当 language_override
值不受支持时它会退回到 default_language
,但显然不是。 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
}
万岁。
关于MongoDB 文本索引错误 : language override not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23815024/