MR并行处理失败:{ok:0.0,errmsg:\“WiredTigerIndex :: insert:键太大而无法索引,失败

时间:2018-04-25 17:20:50

标签: mongodb mongodb-query

我在地图缩小运行的表上有一个复合索引

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字节的索引键限制?

1 个答案:

答案 0 :(得分:1)

1024字节限制适用于所有索引条目documentation

  

索引条目的总大小,可以包含结构   开销取决于BSON类型,必须小于1024字节。

以及

  

MongoDB不会将任何文档插入到索引集合中   索引字段,其对应的索引条目将超过   索引键限制,而是将返回错误。之前的版本   MongoDB会插入但不会索引此类文档。

这解释了您所看到的错误。

您在documentation

中引用的声明旁边
  

文本索引可能很大。

还有以下内容:

  

对于插入的每个文档,它们为每个索引字段中的每个唯一后梗词包含一个索引条目

所以整个文本索引可以大于1024个字节,但每个单独的索引条目都不能。

这就是为什么我倾向于认为在370kb Line1条目中有一个长度超过1024字节的单词。

为了排除复合索引作为潜在的罪魁祸首,您也可以将索引更改为仅索引Line1条目,看看如何:

db.jobs.createIndex({
    Line1: "text"
}, {
  weights: {
    Name: 100,
  },
  name: "custom_text_index"
})