protected QueryParameters cloneTo(QueryParameters result) { result.setSkip(this.getSkip()); result.setLimit(this.getLimit()); result.setMinScore(this.getMinScore()); result.setScoringStrategy(this.getScoringStrategy()); result.hasContainers.addAll(this.getHasContainers()); result.sortContainers.addAll(this.getSortContainers()); result.edgeLabels.addAll(this.getEdgeLabels()); result.ids = this.ids == null ? null : new ArrayList<>(this.ids); return result; }
if (!iterateAll && parameters.getLimit() != null && (this.count >= parameters.getSkip() + parameters.getLimit())) { return; for (QueryBase.HasContainer has : parameters.getHasContainers()) { if (!has.isMatch(vertexiumElem)) { match = false; if (vertexiumElem instanceof Edge && parameters.getEdgeLabels().size() > 0) { Edge edge = (Edge) vertexiumElem; if (!parameters.getEdgeLabels().contains(edge.getLabel())) { match = false; if (parameters.getIds() != null) { if (vertexiumElem instanceof Element) { if (!parameters.getIds().contains(((Element) vertexiumElem).getId())) { match = false; if (!parameters.getIds().contains(((ExtendedDataRow) vertexiumElem).getId().getElementId())) { match = false; if (parameters.getMinScore() != null) { if (parameters.getScoringStrategy() == null) { match = false; } else { Double elementScore = parameters.getScoringStrategy().getScore(vertexiumElem); if (elementScore == null) { match = false; } else { match = elementScore >= parameters.getMinScore();
public DefaultGraphQueryIterable( QueryParameters parameters, Iterable<T> iterable, boolean evaluateQueryString, boolean evaluateHasContainers, boolean evaluateSortContainers ) { checkNotNull(iterable, "iterable cannot be null"); this.parameters = parameters; this.evaluateQueryString = evaluateQueryString; this.evaluateHasContainers = evaluateHasContainers; if (evaluateSortContainers && this.parameters.getSortContainers().size() > 0) { this.iterable = sortUsingSortContainers(iterable, parameters.getSortContainers()); } else if (evaluateHasContainers && this.parameters.getScoringStrategy() != null) { this.iterable = sortUsingScoringStrategy(iterable, parameters.getScoringStrategy()); } else { this.iterable = iterable; } }
for (HasContainer has : getParameters().getHasContainers()) { if (has instanceof HasValueContainer) { filters.add(getFiltersForHasValueContainer((HasValueContainer) has)); && getParameters().getEdgeLabels().size() > 0) { String[] edgeLabelsArray = getParameters().getEdgeLabels().toArray(new String[getParameters().getEdgeLabels().size()]); filters.add(FilterBuilders.inFilter(ElasticsearchSingleDocumentSearchIndex.EDGE_LABEL_FIELD_NAME, edgeLabelsArray)); if (getParameters().getIds().size() > 0) { List<FilterBuilder> orFilters = new ArrayList<>(); String[] idsArray = getParameters().getIds().toArray(new String[getParameters().getIds().size()]); orFilters.add(FilterBuilders.termsFilter("_id", idsArray)); String[] idsArray = getParameters().getIds().toArray(new String[getParameters().getIds().size()]); orFilters.add(FilterBuilders.termsFilter(EXTENDED_DATA_ELEMENT_ID_FIELD_NAME, idsArray)); && getParameters().getIds().size() > 0) { String[] idsArray = getParameters().getIds().toArray(new String[getParameters().getIds().size()]); filters.add(FilterBuilders.idsFilter().addIds(idsArray)); if (queryString == null || queryString.equals("*")) { ElasticsearchSingleDocumentSearchIndex es = (ElasticsearchSingleDocumentSearchIndex) ((GraphWithSearchIndex) getGraph()).getSearchIndex(); Collection<String> fields = es.getQueryableElementTypeVisibilityPropertyNames(getGraph(), getParameters().getAuthorizations()); OrFilterBuilder atLeastOneFieldExistsFilter = new OrFilterBuilder(); for (String field : fields) {
private Iterable<Vertex> allVertices(FetchHints fetchHints) { List<String> edgeLabels = getParameters().getEdgeLabels(); String[] edgeLabelsArray = edgeLabels == null || edgeLabels.size() == 0 ? null : edgeLabels.toArray(new String[edgeLabels.size()]); Iterable<Vertex> results = getSourceVertex().getVertices( getDirection(), edgeLabelsArray, fetchHints, getParameters().getAuthorizations() ); if (getOtherVertexId() != null) { results = new FilterIterable<Vertex>(results) { @Override protected boolean isIncluded(Vertex otherVertex) { return otherVertex.getId().equals(getOtherVertexId()); } }; } if (getParameters().getIds() != null) { results = new FilterIterable<Vertex>(results) { @Override protected boolean isIncluded(Vertex otherVertex) { return getParameters().getIds().contains(otherVertex.getId()); } }; } return results; }
QueryParameters filterParameters = getParameters().clone(); filterParameters.setSkip(0); // ES already did a skip List<Iterable<? extends VertexiumObject>> items = new ArrayList<>(); if (ids.getVertexIds().size() > 0) { Iterable<? extends VertexiumObject> vertices = getGraph().getVertices(ids.getVertexIds(), fetchHints, filterParameters.getAuthorizations()); items.add(vertices); Iterable<? extends VertexiumObject> edges = getGraph().getEdges(ids.getEdgeIds(), fetchHints, filterParameters.getAuthorizations()); items.add(edges); Iterable<? extends VertexiumObject> extendedDataRows = getGraph().getExtendedData(ids.getExtendedDataIds(), filterParameters.getAuthorizations()); items.add(extendedDataRows);
@Override protected List<FilterBuilder> getFilters(String elementType) { List<FilterBuilder> filters = super.getFilters(elementType); AuthorizationFilterBuilder authorizationFilterBuilder = new AuthorizationFilterBuilder(getParameters().getAuthorizations().getAuthorizations()); filters.add(authorizationFilterBuilder); return filters; }
@Test public void testIteratorWithMoreThanPageSizeResultsPageOne() { QueryParameters parameters = new QueryStringQueryParameters("*", AUTHORIZATIONS_EMPTY); parameters.setSkip(0); parameters.setLimit(5); DefaultGraphQueryIterable<Vertex> iterable = new DefaultGraphQueryIterable<>(parameters, getVertices(7), false, false, false); int count = 0; Iterator<Vertex> iterator = iterable.iterator(); Vertex v = null; while (iterator.hasNext()) { count++; v = iterator.next(); assertNotNull(v); } assertEquals(5, count); assertNotNull("v was null", v); assertEquals("4", v.getId()); }
addElementTypeFilter(filters, elementTypes); for (HasContainer has : getParameters().getHasContainers()) { if (has instanceof HasValueContainer) { filters.add(getFiltersForHasValueContainer((HasValueContainer) has)); && getParameters().getEdgeLabels().size() > 0) { String[] edgeLabelsArray = getParameters().getEdgeLabels().toArray(new String[getParameters().getEdgeLabels().size()]); filters.add(QueryBuilders.termsQuery(Elasticsearch2SearchIndex.EDGE_LABEL_FIELD_NAME, edgeLabelsArray)); if (queryString == null || queryString.equals("*")) { Elasticsearch2SearchIndex es = (Elasticsearch2SearchIndex) ((GraphWithSearchIndex) getGraph()).getSearchIndex(); Collection<String> fields = es.getQueryableElementTypeVisibilityPropertyNames(getGraph(), getParameters().getAuthorizations()); BoolQueryBuilder atLeastOneFieldExistsFilter = QueryBuilders.boolQuery(); for (String field : fields) {
private QueryBuilder getVertexFilter(EnumSet<ElasticsearchDocumentType> elementTypes) { List<QueryBuilder> filters = new ArrayList<>(); List<String> edgeLabels = getParameters().getEdgeLabels(); String[] edgeLabelsArray = edgeLabels == null || edgeLabels.size() == 0 ? null : edgeLabels.toArray(new String[edgeLabels.size()]); Stream<EdgeInfo> edgeInfos = stream(sourceVertex.getEdgeInfos( direction, edgeLabelsArray, getParameters().getAuthorizations() )); if (otherVertexId != null) { edgeInfos = edgeInfos.filter(ei -> ei.getVertexId().equals(otherVertexId)); } String[] ids = edgeInfos.map(EdgeInfo::getVertexId).toArray(String[]::new); if (elementTypes.contains(ElasticsearchDocumentType.VERTEX)) { filters.add(QueryBuilders.idsQuery().ids(ids)); } if (elementTypes.contains(ElasticsearchDocumentType.VERTEX_EXTENDED_DATA)) { for (String vertexId : ids) { filters.add( QueryBuilders.boolQuery() .must(QueryBuilders.termQuery(Elasticsearch2SearchIndex.ELEMENT_TYPE_FIELD_NAME, ElasticsearchDocumentType.VERTEX_EXTENDED_DATA.getKey())) .must(QueryBuilders.termQuery(Elasticsearch2SearchIndex.EXTENDED_DATA_ELEMENT_ID_FIELD_NAME, vertexId))); } } return orFilters(filters); }
protected void applySort(SearchRequestBuilder q) { for (SortContainer sortContainer : getParameters().getSortContainers()) { SortOrder esOrder = sortContainer.direction == SortDirection.ASCENDING ? SortOrder.ASC : SortOrder.DESC; if (Element.ID_PROPERTY_NAME.equals(sortContainer.propertyName)) { q.addSort("_uid", esOrder); } else if (Edge.LABEL_PROPERTY_NAME.equals(sortContainer.propertyName)) { q.addSort(Elasticsearch2SearchIndex.EDGE_LABEL_FIELD_NAME, esOrder); } else { PropertyDefinition propertyDefinition = getGraph().getPropertyDefinition(sortContainer.propertyName); if (propertyDefinition == null) { continue; } if (!getSearchIndex().isPropertyInIndex(getGraph(), sortContainer.propertyName)) { continue; } if (!propertyDefinition.isSortable()) { throw new VertexiumException("Cannot sort on non-sortable fields"); } q.addSort(propertyDefinition.getPropertyName() + Elasticsearch2SearchIndex.SORT_PROPERTY_NAME_SUFFIX, esOrder); } } }
@Override public Query skip(int count) { this.parameters.setSkip(count); return this; }
@Override public String[] getIndicesToQuery(ElasticSearchSingleDocumentSearchQueryBase query, ElasticSearchElementType elementType) { for (QueryBase.HasContainer hasContainer : query.getParameters().getHasContainers()) { if (hasContainer instanceof QueryBase.HasValueContainer) { QueryBase.HasValueContainer hasValueContainer = (QueryBase.HasValueContainer) hasContainer; if (hasValueContainer.key.equals(VisalloProperties.CONCEPT_TYPE.getPropertyName())) { Object value = hasValueContainer.value; if (value instanceof String) { String conceptType = (String) value; return new String[]{ getIndexNameForConceptType(conceptType) }; } if (value instanceof String[]) { String[] conceptTypes = (String[]) value; String[] indexNames = new String[conceptTypes.length]; for (int i = 0; i < conceptTypes.length; i++) { indexNames[i] = getIndexNameForConceptType(conceptTypes[i]); } return indexNames; } } } } return indiciesToQuery; } }
private ElasticsearchGraphQueryIterable<SearchHit> searchResponseToSearchHitsIterable(SearchResponse response) { SearchHits hits = response.getHits(); QueryParameters filterParameters = getParameters().clone(); Iterable<SearchHit> hitsIterable = IterableUtils.toIterable(hits.getHits()); return createIterable(response, filterParameters, hitsIterable, response.getTookInMillis(), hits); }
@Override protected boolean isIncluded(Vertex otherVertex) { return getParameters().getIds().contains(otherVertex.getId()); } };
); if (getParameters().getMinScore() != null) { searchRequestBuilder.setMinScore(getParameters().getMinScore().floatValue());
for (HasContainer has : getParameters().getHasContainers()) { if (has instanceof HasValueContainer) { filters.add(getFiltersForHasValueContainer((HasValueContainer) has)); && getParameters().getEdgeLabels().size() > 0) { String[] edgeLabelsArray = getParameters().getEdgeLabels().toArray(new String[0]); filters.add(QueryBuilders.termsQuery(Elasticsearch5SearchIndex.EDGE_LABEL_FIELD_NAME, edgeLabelsArray)); ) { Elasticsearch5SearchIndex es = (Elasticsearch5SearchIndex) ((GraphWithSearchIndex) getGraph()).getSearchIndex(); Collection<String> queryableVisibilities = es.getQueryableExtendedDataVisibilities(getGraph(), getParameters().getAuthorizations()); TermsQueryBuilder extendedDataVisibilitiesTerms = QueryBuilders.termsQuery(EXTENDED_DATA_TABLE_COLUMN_VISIBILITIES_FIELD_NAME, queryableVisibilities); if (getParameters().getIds() != null) { String[] idsArray = getParameters().getIds().toArray(new String[0]); filters.add(QueryBuilders.termsQuery(ELEMENT_ID_FIELD_NAME, idsArray)); Collection<String> fields = es.getQueryableElementTypeVisibilityPropertyNames(getGraph(), getParameters().getAuthorizations()); BoolQueryBuilder atLeastOneFieldExistsFilter = QueryBuilders.boolQuery(); for (String field : fields) {
private Iterable<Vertex> allVertices(FetchHints fetchHints) { List<String> edgeLabels = getParameters().getEdgeLabels(); String[] edgeLabelsArray = edgeLabels == null || edgeLabels.size() == 0 ? null : edgeLabels.toArray(new String[edgeLabels.size()]); Iterable<Vertex> results = getSourceVertex().getVertices( getDirection(), edgeLabelsArray, fetchHints, getParameters().getAuthorizations() ); if (getOtherVertexId() != null) { results = new FilterIterable<Vertex>(results) { @Override protected boolean isIncluded(Vertex otherVertex) { return otherVertex.getId().equals(getOtherVertexId()); } }; } if (getParameters().getIds() != null) { results = new FilterIterable<Vertex>(results) { @Override protected boolean isIncluded(Vertex otherVertex) { return getParameters().getIds().contains(otherVertex.getId()); } }; } return results; }