use of org.unipop.elastic.document.Document in project unipop by unipop-graph.
the class NestedEdgeSchema method addElement.
@Override
public BulkableAction<DocumentResult> 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<String, Object> edgeFields = getFields(edge);
Map<String, Object> childFields = getVertexFields(edge, parentDirection.opposite());
Map<String, Object> nestedFields = ConversionUtils.merge(Lists.newArrayList(edgeFields, childFields), this::mergeFields, false);
if (nestedFields == null)
return null;
Set<String> idField = propertySchemas.stream().map(schema -> schema.toFields(Collections.singleton(T.id.getAccessor()))).findFirst().get();
try {
HashMap<String, Object> params = new HashMap<>();
params.put("nestedDoc", nestedFields);
params.put("path", path);
params.put("edgeId", edge.id());
params.put("idField", idField.iterator().next());
HashMap<String, Object> docMap = new HashMap<>();
HashMap<String, Object> 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;
}
}
use of org.unipop.elastic.document.Document in project unipop by unipop-graph.
the class AbstractDocSchema method parseResults.
@Override
public List<E> parseResults(String result, PredicateQuery query) {
List<E> results = new ArrayList<>();
try {
JsonNode hits = mapper.readTree(result).get("hits").get("hits");
for (JsonNode hit : hits) {
Map<String, Object> source = hit.has("_source") ? mapper.readValue(hit.get("_source").toString(), Map.class) : new HashMap<>();
Document document = new Document(hit.get("_index").asText(), hit.get("_type").asText(), hit.get("_id").asText(), source);
Collection<E> elements = fromDocument(document);
if (elements != null) {
elements.forEach(element -> {
if (element != null && query.test(element, query.getPredicates()))
results.add(element);
});
}
}
} catch (IOException e) {
e.printStackTrace();
}
return results;
}
use of org.unipop.elastic.document.Document in project unipop by unipop-graph.
the class AbstractDocSchema method addElement.
@Override
public BulkableAction<DocumentResult> addElement(E element, boolean create) {
Document document = toDocument(element);
if (document == null)
return null;
Index.Builder builder = new Index.Builder(document.getFields()).index(document.getIndex()).type(document.getType()).id(document.getId());
return builder.build();
}
Aggregations