我正在尝试使用Mongodb上的文本索引.
我已经在一个集合上使用了文本索引:
db.ensureIndex({field1 : "text"})
Run Code Online (Sandbox Code Playgroud)
它的工作原理.
但我重新审视了另一个集合,我收到以下消息:
db.movies.ensureIndex({genres: "text"})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"ok" : 0,
"errmsg" : "found language override field in document with non-string type",
"code" : 17261
}
Run Code Online (Sandbox Code Playgroud)
集合"movies"有一个"genres"字段,它是一个字符串数组.例如 :
> db.movies.findOne()
{
"_id" : ObjectId("51c460fdc30a209dd9621dc4"),
"genres" : [
"Crime",
"Drama"
]
...
}
Run Code Online (Sandbox Code Playgroud)
该字段出现在所有文档中.
我不明白这个错误.任何的想法 ?
Bat*_*eam 15
当您尝试text在文档中的字段上创建索引,并且该文档具有非字符串类型的field命名时language,会发生此错误.
来自文档:
如果集合包含不同语言的文档或子文档,请在文档或子文档中包含名为language的字段,并将该文档或子文档的语言指定为其值.
在构建文本索引时,MongoDB将使用该文档或子文档的指定语言
默认情况下,构建文本索引的语言是英语.如果名为的字段language存在于文档范围内,则MongoDb假定它是一个字段,指定用于构建该文档索引的语言.
因此,在这种情况下,如果您使用a text index并且具有名为language文档的一部分的字段而不是用于指定构建索引的语言的字段,则需要将该language_override属性设置为某个不存在的虚拟字段. .这是通知MongoDB的是,你看,你应该使用英语作为默认语言,如果我的文档包含一个名为场dummy,然后使用值在该领域的语言来构建该文档和索引没有的language领域.
db.movies.ensureIndex( { generes: "text" },
{ language_override: "dummy" } )
Run Code Online (Sandbox Code Playgroud)
您的电影收藏包含一个字段“语言”,其类型不被 mongo DB 接受。确保“语言”不是空字符串,仅包含以下值(请参阅文本搜索语言):
da or danish
nl or dutch
en or english
fi or finnish
fr or french
de or german
hu or hungarian
it or italian
nb or norwegian
pt or portuguese
ro or romanian
ru or russian
es or spanish
sv or swedish
tr or turkish
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2557 次 |
| 最近记录: |