import io.searchbox.core.Update; //导入依赖的package包/类
@Override
public BulkableAction addElement(Edge edge, boolean create) {
//TODO: use the 'create' parameter to differentiate between add and update
Vertex parentVertex = parentDirection.equals(Direction.OUT) ? edge.outVertex() : edge.inVertex();
Document parentDoc = parentVertexSchema.toDocument(parentVertex);
if (parentDoc == null) return null;
Map edgeFields = getFields(edge);
Map childFields = getVertexFields(edge, parentDirection.opposite());
Map nestedFields = ConversionUtils.merge(Lists.newArrayList(edgeFields, childFields), this::mergeFields, false);
if (nestedFields == null) return null;
Set idField = propertySchemas.stream()
.map(schema -> schema.toFields(Collections.singleton(T.id.getAccessor()))).findFirst().get();
try {
HashMap params = new HashMap<>();
params.put("nestedDoc", nestedFields);
params.put("path", path);
params.put("edgeId", edge.id());
params.put("idField", idField.iterator().next());
HashMap docMap = new HashMap<>();
HashMap script = new HashMap<>();
script.put("params", params);
script.put("inline", UPDATE_SCRIPT);
script.put("lang", "groovy");
docMap.put("scripted_upsert", true);
docMap.put("script", script);
String json = mapper.writeValueAsString(docMap);
return new Update.Builder(json).index(parentDoc.getIndex()).type(parentDoc.getType()).id(parentDoc.getId()).build();
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}