我的文档包含一个对象,该对象的属性在运行时可编辑(添加/删除/编辑)。
{
"testIndex" : {
"mappings" : {
"documentTest" : {
"properties" : {
"typeTestId" : {
"type" : "string",
"index" : "not_analyzed"
},
"createdDate" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"designation" : {
"type" : "string",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed"
}
}
},
"id" : {
"type" : "string",
"index" : "not_analyzed"
},
"modifiedDate" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"stuff" : {
"type" : "string"
},
"suggest" : {
"type" : "completion",
"analyzer" : "simple",
"payloads" : true,
"preserve_separators" : true,
"preserve_position_increments" : true,
"max_input_length" : 50,
"context" : {
"typeTestId" : {
"type" : "category",
"path" : "typeTestId",
"default" : [ ]
}
}
},
"values" : {
"properties" : {
"Att1" : {
"type" : "string"
},
"att2" : {
"type" : "string"
},
"att400" : {
"type" : "date",
"format" : "dateOptionalTime"
}
}
}
}
}
}
}
}
字段值是可以通过typeTest进行编辑的对象,因此,如果我在typeTestit中进行了更改,则应在此处反映出来。如果我创建一个新字段,没有问题,但是应该可以编辑或删除typeTest中的现有字段。例如,如果我删除values.att1,则所有documentTest都将丢失这些值,并且应更新映射。
就我所见,如果不重新编制索引,我们将无法做到这些。所以现在,我的解决方案是像在此问题中提到的那样删除弹性搜索中的字段,并让工作人员在需要时不时重新索引。
在我看来,这不是一个“解决方案”。在Elasticsearch中是否有更好的方法来拥有这种类型的文档?具有这种灵活性而不必时不时重新编制索引?
您可以使用Update API删除,添加或修改字段。
问题是文档在Elasticsearch中是不可变的,因此当您使用update API进行某些更改时,它会以某种方式执行mark as deleted to old one and add a new one with the updates
。
删除和创建新文档对您是透明的,因此您不必重新索引或执行任何其他操作。不利的一面是,如果您打算修改大量文档(例如用于修改5百万个文档的更新查询),则节点的I / O密集度很高。
顺便说一句,这也适用于删除
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句