Search in sources :

Example 1 with Document

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;
    }
}
Also used : Vertex(org.apache.tinkerpop.gremlin.structure.Vertex) QueryBuilder(org.elasticsearch.index.query.QueryBuilder) NestedQueryBuilder(org.elasticsearch.index.query.NestedQueryBuilder) JSONObject(org.json.JSONObject) Document(org.unipop.elastic.document.Document) JsonProcessingException(org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException)

Example 2 with Document

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;
}
Also used : JsonNode(org.apache.tinkerpop.shaded.jackson.databind.JsonNode) JSONObject(org.json.JSONObject) IOException(java.io.IOException) Document(org.unipop.elastic.document.Document)

Example 3 with Document

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();
}
Also used : Index(io.searchbox.core.Index) Document(org.unipop.elastic.document.Document)

Aggregations

Document (org.unipop.elastic.document.Document)3 JSONObject (org.json.JSONObject)2 Index (io.searchbox.core.Index)1 IOException (java.io.IOException)1 Vertex (org.apache.tinkerpop.gremlin.structure.Vertex)1 JsonProcessingException (org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException)1 JsonNode (org.apache.tinkerpop.shaded.jackson.databind.JsonNode)1 NestedQueryBuilder (org.elasticsearch.index.query.NestedQueryBuilder)1 QueryBuilder (org.elasticsearch.index.query.QueryBuilder)1