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

雨果·拉西耶格(HugoLassiège)

我正在尝试在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
}

集合“电影”具有一个“类型”字段,该字段是字符串数组。例如 :

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

该字段出现在所有文档中。

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

蝙蝠尖叫

当您尝试text在文档中的字段上创建索引,并且文档具有非字符串类型field命名名称时language会发生此错误

文档

如果集合包含使用不同语言的文档或子文档,请在文档或子文档中包含一个名为language的字段,并将该文档或子文档的语言指定为其值。

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

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

因此,要在这样的情况下欺骗MongoDB,在这种情况下,您使用atext index并拥有一个名为language文档的一部分的字段,不是用于指定用于建立索引的语言的字段,则需要将language_override属性设置为一些不存在的虚拟字段。这是为了通知MongoDb,看起来,您应该使用英语作为默认语言,并且如果我的文档包含名为的字段dummy,则使用该字段中的值作为构建该文档而不是language字段的索引的语言

db.movies.ensureIndex( { generes: "text" },
                       { language_override: "dummy" } )

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章