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

2024-01-02

我使用的是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" })

提前致谢!


解决方案:

Set the default_language and 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"
});

我本来希望它会回落到default_language当。。。的时候language_override值不受支持,但显然不支持。蒙戈是这样说的:

{
  "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
}

欢呼。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 文本索引错误:不支持语言覆盖 的相关文章

随机推荐