在 Mongodb 上使用文本索引时出错

2024-01-17

我正在尝试在 Mongodb 上使用文本索引。

我已经在一个集合上使用了文本索引:

db.ensureIndex({field1 : "text"}) 

它有效。

但我重试了另一个集合,并收到以下消息:

db.movies.ensureIndex({genres: "text"})
{
    "createdCollectionAutomatically" : false,
    "numIndexesBefore" : 1,
    "ok" : 0,
    "errmsg" : "found language override field in document with non-string type",
    "code" : 17261
}

集合“movies”有一个“genres”字段,它是一个字符串数组。 例如 :

> db.movies.findOne()
{
    "_id" : ObjectId("51c460fdc30a209dd9621dc4"),
    "genres" : [
            "Crime",
            "Drama"
    ]
    ...
}

该字段存在于所有文档中。

我不明白这个错误。任何想法 ?


当您尝试创建一个text文档中某个字段的索引,并且该文档有一个field named language这是属于非字符串 type.

来自docs http://docs.mongodb.org/manual/tutorial/specify-language-for-text-index/:

如果集合包含位​​于以下位置的文档或子文档 不同的语言,在文档中包含一个名为 language 的字段 或子文档并指定其语言作为其值 文档或子文档。

MongoDB 将使用该文档的指定语言或 构建文本索引时的子文档

默认情况下,构建文本索引的语言是English。如果一个字段名为language存在于文档范围内,MongoDb 假定它是一个指定用于构建该文档索引的语言的字段。

因此,在使用以下方法的情况下欺骗 MongoDBtext index并有一个名为language这是文档的一部分并且not指定构建索引语言的字段,需要设置language_override属性到一些不存在的虚拟字段。这是为了通知 MongoDb,你应该使用英语作为默认语言,并且if我的文档包含一个名为dummy,然后使用该字段中的值作为语言来构建该文档的索引,并且not the language field.

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

在 Mongodb 上使用文本索引时出错 的相关文章

随机推荐