@Override public <E extends Element> Iterator<E> search(SearchQuery<E> uniQuery) { if(uniQuery.getReturnType() != Vertex.class) return EmptyIterator.instance(); PredicatesHolder predicates = uniQuery.getPredicates(); List<? extends VirtualVertexSchema> filteredSchemas = vertexSchemas.stream() .filter(schema -> !schema.toPredicates(predicates).getClause().equals(PredicatesHolder.Clause.Abort)).collect(Collectors.toList()); Optional<HasContainer> ids = predicates.getPredicates().stream().filter(has -> has.getKey().equals(T.id.getAccessor())).findFirst(); Optional<HasContainer> labels = predicates.getPredicates().stream().filter(has -> has.getKey().equals(T.label.getAccessor())).findFirst(); if (!ids.isPresent() || !labels.isPresent()){ return EmptyIterator.instance(); } ArrayList<Map<String, Object>> elements = new ArrayList<>(); Object idObject = ids.get().getValue(); Collection<Object> idsCol = idObject instanceof Collection ? ((Collection) idObject) : Collections.singleton(idObject); Object labelObject = labels.get().getValue(); Collection<Object> labelCol = labelObject instanceof Collection ? ((Collection) labelObject) : Collections.singleton(labelObject); idsCol.forEach(id -> labelCol.forEach(label -> elements.add(createElement(id, label.toString())))); return (Iterator<E>) elements.stream().flatMap(fields -> filteredSchemas.stream().flatMap(schema -> Stream.of(schema.createElement(fields)))).filter(v -> v != null).iterator(); } }
@Override public QueryBuilder getSearch(SearchQuery<Edge> query) { PredicatesHolder predicatesHolder = this.toPredicates(query.getPredicates()); QueryBuilder queryBuilder = createQueryBuilder(predicatesHolder); if(queryBuilder == null) return null; return QueryBuilders.nestedQuery(this.path, queryBuilder, ScoreMode.None); }
@Override public BaseRequest getSearch(SearchQuery<E> query) { int limit = query.getOrders() == null || query.getOrders().size() > 0 ? -1 : query.getLimit(); return createSearch(this.toPredicates(query.getPredicates()), limit); }
@Override public QueryBuilder getSearch(SearchQuery<E> query) { PredicatesHolder predicatesHolder = this.toPredicates(query.getPredicates()); if (predicatesHolder.getClause().equals(PredicatesHolder.Clause.Abort)) return null; QueryBuilder queryBuilder = createQueryBuilder(predicatesHolder); return queryBuilder; // return createSearch(query, queryBuilder); }
@Override public <E extends Element> Iterator<E> search(SearchQuery<E> uniQuery) { SelectCollector<JdbcSchema<E>, Select, E> collector = new SelectCollector<>( schema -> schema.getSearch(uniQuery, schema.toPredicates(uniQuery.getPredicates())), (schema, results) -> schema.parseResults(results, uniQuery) ); Set<? extends JdbcSchema<E>> schemas = this.getSchemas(uniQuery.getReturnType()); Map<JdbcSchema<E>, Select> selects = schemas.stream() .filter(schema -> this.traversalFilter.filter(schema, uniQuery.getTraversal())).collect(collector); return this.search(uniQuery, selects, collector); }
private <E extends Element, S extends DocumentSchema<E>> Pair<S, Search> createSearch(Pair<S, SearchSourceBuilder> kv, SearchQuery<E> query) { Search.Builder builder = new Search.Builder(kv.getValue1().toString().replace("\n", "")) .ignoreUnavailable(true).allowNoIndices(true).setParameter(Parameters.SCROLL, "6m"); kv.getValue0().getIndex().getIndex(query.getPredicates()).forEach(builder::addIndex); return Pair.with(kv.getValue0(), builder.build()); }