我使用的是2.6.1版.我正在尝试创建一个文本索引,我收到错误:
{
"connectionId" : 4932,
"err" : "language override unsupported: en-US",
"code" : 17262,
"n" : 0,
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
被搜索的文档具有"语言"字段,其值为"en-US",但不用于在文本搜索中覆盖该语言.我试图创建文本索引来指定一个不存在的字段("lang"); 但是,我得到了同样的错误.我能够在2.6.0版本上创建索引.有没有办法创建文本索引并忽略language_override字段?
这是我在2.6.0上使用的工作命令(在2.6.1上不起作用):
db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" })
Run Code Online (Sandbox Code Playgroud)
这是我在2.6.1上尝试指定另一个不存在的language_override字段的命令:
db.collection.ensureIndex({ title: "text" }, { name: "TextIndex" }, { language_override: "lang" })
Run Code Online (Sandbox Code Playgroud)
提前致谢!
Ste*_*vie 16
将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"
});
Run Code Online (Sandbox Code Playgroud)
我希望它会回落到default_language当language_override值不受支持,但显然不是.这是Mongo所说的:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"ok" : 0,
"errmsg" : "language override unsupported: ar",
"code" : 17262
}
Run Code Online (Sandbox Code Playgroud)
好的,没问题,所以索引没有创建,但我应该可以在没有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"
});
Run Code Online (Sandbox Code Playgroud)
...... Mongo回复:
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 3,
"numIndexesAfter" : 4,
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
欢呼.
MongoDB 仅接受 2 个字母的代码或语言全名。
希望能帮助到你 :)