我正在尝试在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] 删除。
我来说两句