我在地图缩小运行的表上有一个复合索引
db.jobs.createIndex({
Name: "text",
Line1: "text",
City: "text",
State: "text",
Zip: "text",
PropertyId: "text",
Line2: "text",
JobId: 1,
JobOwner: 1,
Amount: 1
}, {
weights: {
Name: 100,
},
name: "custom_text_index"
})
还有一个条目,其中 Line1,其文字索引,大约 370KB ,因为这个mapreduce失败并出现以下错误
2018-04-22T13:34:50.666+0000 E QUERY [thread1] Error: map reduce failed:{
"code" : 17280,
"ok" : 0,
"errmsg" : "MR parallel processing failed: { ok: 0.0, errmsg: \"WiredTigerIndex::insert: key too large to index, failing 371495 { : { Agency_Id: 190.0, PropertyId: \"070720762\", Name: \"MOUNT SINAI SCHOOL OF M...\", code: 17280, codeName: \"KeyTooLong\" }"
虽然mongo doc说text index can be large,但是在上述复合索引的情况下它仍然有效吗?或者它是否受到1024字节的索引键限制?
答案 0 :(得分:1)
1024字节限制适用于所有索引条目。 documentation州
索引条目的总大小,可以包含结构 开销取决于BSON类型,必须小于1024字节。
以及
MongoDB不会将任何文档插入到索引集合中 索引字段,其对应的索引条目将超过 索引键限制,而是将返回错误。之前的版本 MongoDB会插入但不会索引此类文档。
这解释了您所看到的错误。
中引用的声明旁边文本索引可能很大。
还有以下内容:
对于插入的每个文档,它们为每个索引字段中的每个唯一后梗词包含一个索引条目。
所以整个文本索引可以大于1024个字节,但每个单独的索引条目都不能。
这就是为什么我倾向于认为在370kb Line1
条目中有一个长度超过1024字节的单词。
为了排除复合索引作为潜在的罪魁祸首,您也可以将索引更改为仅索引Line1
条目,看看如何:
db.jobs.createIndex({
Line1: "text"
}, {
weights: {
Name: 100,
},
name: "custom_text_index"
})