@Override public List<String> searchArchivableWorkflows(String indexName, long archiveTtlDays) { QueryBuilder q = QueryBuilders.boolQuery() .should(QueryBuilders.termQuery("status", "COMPLETED")) .should(QueryBuilders.termQuery("status", "FAILED")) .mustNot(QueryBuilders.existsQuery("archived")) .minimumShouldMatch(1); SearchRequestBuilder s = elasticSearchClient.prepareSearch(indexName) .setTypes("workflow") .setQuery(q) .addSort("endTime", SortOrder.ASC) .setSize(archiveSearchBatchSize); SearchResponse response = s.execute().actionGet(); SearchHits hits = response.getHits(); logger.info("Archive search totalHits - {}", hits.getTotalHits()); return Arrays.stream(hits.getHits()) .map(hit -> hit.getId()) .collect(Collectors.toCollection(LinkedList::new)); }
@Override public List<String> searchArchivableWorkflows(String indexName, long archiveTtlDays) { QueryBuilder q = QueryBuilders.boolQuery() .must(QueryBuilders.rangeQuery("endTime").lt(LocalDate.now().minusDays(archiveTtlDays).toString())) .should(QueryBuilders.termQuery("status", "COMPLETED")) .should(QueryBuilders.termQuery("status", "FAILED")) .mustNot(QueryBuilders.existsQuery("archived")) .minimumShouldMatch(1); SearchResult<String> workflowIds; try { workflowIds = searchObjectIds(indexName, q, 0, 1000, WORKFLOW_DOC_TYPE); } catch (IOException e) { logger.error("Unable to communicate with ES to find archivable workflows", e); return Collections.emptyList(); } return workflowIds.getResults(); }
if (ORconnective) b.should(filter); else b.must(filter); if (ORconnective) b.minimumShouldMatch(1);
public static QueryBuilder exactMatchQueryBuilder(String q, Boosts boosts) { BoolQueryBuilder qb = QueryBuilders.boolQuery(); boosts.forEach((mapping, boost) -> qb.should(QueryBuilders.termQuery(mapping.getMapping().name(), q))); qb.minimumShouldMatch(1); return qb; }
private PhotonQueryBuilder(String query, String language) { defaultMatchQueryBuilder = QueryBuilders.matchQuery("collector.default", query).fuzziness(Fuzziness.ZERO).prefixLength(2).analyzer("search_ngram").minimumShouldMatch("100%"); languageMatchQueryBuilder = QueryBuilders.matchQuery(String.format("collector.%s.ngrams", language), query).fuzziness(Fuzziness.ZERO).prefixLength(2) .analyzer("search_ngram").minimumShouldMatch("100%"); // @formatter:off m_query4QueryBuilder = QueryBuilders.boolQuery() .must(QueryBuilders.boolQuery().should(defaultMatchQueryBuilder).should(languageMatchQueryBuilder) .minimumShouldMatch("1")) .should(QueryBuilders.matchQuery(String.format("name.%s.raw", language), query).boost(200) .analyzer("search_raw")) .should(QueryBuilders.matchQuery(String.format("collector.%s.raw", language), query).boost(100) .analyzer("search_raw")); // @formatter:on // this is former general-score, now inline String strCode = "double score = 1 + doc['importance'].value * 100; score"; ScriptScoreFunctionBuilder functionBuilder4QueryBuilder = ScoreFunctionBuilders.scriptFunction(new Script(ScriptType.INLINE, "painless", strCode, new HashMap<String, Object>())); m_alFilterFunction4QueryBuilder.add(new FilterFunctionBuilder(functionBuilder4QueryBuilder)); m_finalQueryWithoutTagFilterBuilder = new FunctionScoreQueryBuilder(m_query4QueryBuilder, m_alFilterFunction4QueryBuilder.toArray(new FilterFunctionBuilder[0])) .boostMode(CombineFunction.MULTIPLY).scoreMode(ScoreMode.MULTIPLY); // @formatter:off m_queryBuilderForTopLevelFilter = QueryBuilders.boolQuery() .should(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("housenumber"))) .should(QueryBuilders.matchQuery("housenumber", query).analyzer("standard")) .should(QueryBuilders.existsQuery(String.format("name.%s.raw", language))); // @formatter:on state = State.PLAIN; }
boolQuery.minimumShouldMatch(minimumShouldMatch); boolQuery.queryName(queryName); return boolQuery;
private QueryBuilder orFilters(List<QueryBuilder> filters) { if (filters.size() == 1) { return filters.get(0); } else { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (QueryBuilder filter : filters) { boolQuery.should(filter); } boolQuery.minimumShouldMatch(1); return boolQuery; } }
private QueryBuilder orFilters(List<QueryBuilder> filters) { if (filters.size() == 1) { return filters.get(0); } else { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (QueryBuilder filter : filters) { boolQuery.should(filter); } boolQuery.minimumShouldMatch(1); return boolQuery; } }
private QueryBuilder getSingleFilterOrOrTheFilters(List<QueryBuilder> filters, HasContainer has) { if (filters.size() > 1) { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (QueryBuilder filter : filters) { boolQuery.should(filter); } boolQuery.minimumShouldMatch(1); return boolQuery; } else if (filters.size() == 1) { return filters.get(0); } else { throw new VertexiumException("Unexpected filter count, expected at least 1 filter for: " + has); } }
private QueryBuilder getSingleFilterOrOrTheFilters(List<QueryBuilder> filters, HasContainer has) { if (filters.size() > 1) { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (QueryBuilder filter : filters) { boolQuery.should(filter); } boolQuery.minimumShouldMatch(1); return boolQuery; } else if (filters.size() == 1) { return filters.get(0); } else { throw new VertexiumException("Unexpected filter count, expected at least 1 filter for: " + has); } }
private QueryBuilder getFilterForHasExtendedData(HasExtendedData has) { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (HasExtendedDataFilter hasExtendedDataFilter : has.getFilters()) { boolQuery.should(getFilterForHasExtendedDataFilter(hasExtendedDataFilter)); } boolQuery.minimumShouldMatch(1); return boolQuery; }
private QueryBuilder getFilterForHasExtendedData(HasExtendedData has) { BoolQueryBuilder boolQuery = QueryBuilders.boolQuery(); for (HasExtendedDataFilter hasExtendedDataFilter : has.getFilters()) { boolQuery.should(getFilterForHasExtendedDataFilter(hasExtendedDataFilter)); } boolQuery.minimumShouldMatch(1); return boolQuery; }
private QueryBuilder getFilterForProperty(Contains contains, HasValueContainer has, String propertyName, Object value) { if (Element.ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.ELEMENT_ID_FIELD_NAME; } else if (Edge.LABEL_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.EDGE_LABEL_FIELD_NAME; } else if (Edge.OUT_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.OUT_VERTEX_ID_FIELD_NAME; } else if (Edge.IN_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.IN_VERTEX_ID_FIELD_NAME; } else if (Edge.IN_OR_OUT_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { return QueryBuilders.boolQuery() .should(getFilterForProperty(contains, has, Edge.OUT_VERTEX_ID_PROPERTY_NAME, value)) .should(getFilterForProperty(contains, has, Edge.IN_VERTEX_ID_PROPERTY_NAME, value)) .minimumShouldMatch(1); } else if (value instanceof String || value instanceof String[] || (value instanceof Object[] && ((Object[]) value).length > 0 && ((Object[]) value)[0] instanceof String) ) { propertyName = propertyName + Elasticsearch5SearchIndex.EXACT_MATCH_PROPERTY_NAME_SUFFIX; } switch (contains) { case IN: return QueryBuilders.termsQuery(propertyName, (Object[]) value); case NOT_IN: return QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(propertyName, (Object[]) value)); default: throw new VertexiumException("Unexpected Contains predicate " + has.predicate); } }
private QueryBuilder getFilterForProperty(Contains contains, HasValueContainer has, String propertyName, Object value) { if (Element.ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.ELEMENT_ID_FIELD_NAME; } else if (Edge.LABEL_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.EDGE_LABEL_FIELD_NAME; } else if (Edge.OUT_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.OUT_VERTEX_ID_FIELD_NAME; } else if (Edge.IN_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { propertyName = Elasticsearch5SearchIndex.IN_VERTEX_ID_FIELD_NAME; } else if (Edge.IN_OR_OUT_VERTEX_ID_PROPERTY_NAME.equals(propertyName)) { return QueryBuilders.boolQuery() .should(getFilterForProperty(contains, has, Edge.OUT_VERTEX_ID_PROPERTY_NAME, value)) .should(getFilterForProperty(contains, has, Edge.IN_VERTEX_ID_PROPERTY_NAME, value)) .minimumShouldMatch(1); } else if (value instanceof String || value instanceof String[] || (value instanceof Object[] && ((Object[]) value).length > 0 && ((Object[]) value)[0] instanceof String) ) { propertyName = propertyName + Elasticsearch5SearchIndex.EXACT_MATCH_PROPERTY_NAME_SUFFIX; } switch (contains) { case IN: return QueryBuilders.termsQuery(propertyName, (Object[]) value); case NOT_IN: return QueryBuilders.boolQuery().mustNot(QueryBuilders.termsQuery(propertyName, (Object[]) value)); default: throw new VertexiumException("Unexpected Contains predicate " + has.predicate); } }
orBuilder.should( shouldBuilder ); orBuilder.minimumShouldMatch( 1 ); queryBuilder.must( orBuilder );
private QueryBuilder getEdgeFilter() { switch (direction) { case BOTH: QueryBuilder inVertexIdFilter = getDirectionInEdgeFilter(); QueryBuilder outVertexIdFilter = getDirectionOutEdgeFilter(); return QueryBuilders.boolQuery() .should(inVertexIdFilter) .should(outVertexIdFilter) .minimumShouldMatch(1); case OUT: return getDirectionOutEdgeFilter(); case IN: return getDirectionInEdgeFilter(); default: throw new VertexiumException("unexpected direction: " + direction); } }
private QueryBuilder getEdgeFilter() { switch (direction) { case BOTH: QueryBuilder inVertexIdFilter = getDirectionInEdgeFilter(); QueryBuilder outVertexIdFilter = getDirectionOutEdgeFilter(); return QueryBuilders.boolQuery() .should(inVertexIdFilter) .should(outVertexIdFilter) .minimumShouldMatch(1); case OUT: return getDirectionOutEdgeFilter(); case IN: return getDirectionInEdgeFilter(); default: throw new VertexiumException("unexpected direction: " + direction); } }
public SearchResponse minimumShouldMatch(List<String> terms, String field, int percentage, int size, String docFilter){ BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery(); for (String term: terms){ queryBuilder.should(QueryBuilders.constantScoreQuery(QueryBuilders.matchQuery(field, term))); } queryBuilder.minimumShouldMatch(""+percentage+"%"); //debug // XContentBuilder builder = XContentFactory.jsonBuilder(); // // builder.startObject(); // queryBuilder.toXContent(builder, ToXContent.EMPTY_PARAMS); // builder.endObject(); // System.out.println(builder.string()); SearchResponse response = client.prepareSearch(indexName).setSize(size) .setTrackScores(false) .setExplain(false).setFetchSource(false). setQuery( QueryBuilders.boolQuery() .filter(QueryBuilders.wrapperQuery(docFilter)) .must(queryBuilder)) .execute().actionGet(); return response; }
.should(getFilterForProperty(compare, has, Edge.OUT_VERTEX_ID_PROPERTY_NAME, value)) .should(getFilterForProperty(compare, has, Edge.IN_VERTEX_ID_PROPERTY_NAME, value)) .minimumShouldMatch(1); } else if (has.value instanceof IpV4Address) {
.should(getFilterForProperty(compare, has, Edge.OUT_VERTEX_ID_PROPERTY_NAME, value)) .should(getFilterForProperty(compare, has, Edge.IN_VERTEX_ID_PROPERTY_NAME, value)) .minimumShouldMatch(1); } else if (has.value instanceof IpV4Address) {