我正在尝试在 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(使用前将#替换为@)