public static Query newRangeSeekByStringQuery( String lower, boolean includeLower, String upper, boolean includeUpper ) { boolean includeLowerBoundary = StringUtils.EMPTY.equals( lower ) || includeLower; boolean includeUpperBoundary = StringUtils.EMPTY.equals( upper ) || includeUpper; TermRangeQuery termRangeQuery = TermRangeQuery.newStringRange( ValueEncoding.String.key( 0 ), lower, upper, includeLowerBoundary, includeUpperBoundary ); if ( (includeLowerBoundary != includeLower) || (includeUpperBoundary != includeUpper) ) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); if ( includeLowerBoundary != includeLower ) { builder.add( new TermQuery( new Term( ValueEncoding.String.key( 0 ), lower ) ), BooleanClause.Occur.MUST_NOT ); } if ( includeUpperBoundary != includeUpper ) { builder.add( new TermQuery( new Term( ValueEncoding.String.key( 0 ), upper ) ), BooleanClause.Occur.MUST_NOT ); } builder.add( termRangeQuery, BooleanClause.Occur.FILTER ); return new ConstantScoreQuery( builder.build() ); } return termRangeQuery; }
@Override public long countIndexedNodes( long nodeId, int[] propertyKeyIds, Value... propertyValues ) { Query nodeIdQuery = new TermQuery( LuceneDocumentStructure.newTermForChangeOrRemove( nodeId ) ); Query valueQuery = LuceneDocumentStructure.newSeekQuery( propertyValues ); BooleanQuery.Builder nodeIdAndValueQuery = new BooleanQuery.Builder().setDisableCoord( true ); nodeIdAndValueQuery.add( nodeIdQuery, BooleanClause.Occur.MUST ); nodeIdAndValueQuery.add( valueQuery, BooleanClause.Occur.MUST ); try { TotalHitCountCollector collector = new TotalHitCountCollector(); getIndexSearcher().search( nodeIdAndValueQuery.build(), collector ); // A <label,propertyKeyId,nodeId> tuple should only match at most a single propertyValue return collector.getTotalHits(); } catch ( IOException e ) { throw new RuntimeException( e ); } }
/** Expert: add a custom drill-down subQuery. Use this * when you have a separate way to drill-down on the * dimension than the indexed facet ordinals. */ public void add(String dim, Query subQuery) { assert drillDownDims.size() == dimQueries.size(); if (drillDownDims.containsKey(dim) == false) { drillDownDims.put(dim, drillDownDims.size()); BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); dimQueries.add(builder); } final int index = drillDownDims.get(dim); dimQueries.get(index).add(subQuery, Occur.SHOULD); }
/** * Creates simple boolean query from the cached tokenstream contents */ private Query analyzeBoolean(String field, TokenStream stream) throws IOException { BooleanQuery.Builder q = new BooleanQuery.Builder(); q.setDisableCoord(true); TermToBytesRefAttribute termAtt = stream.getAttribute(TermToBytesRefAttribute.class); stream.reset(); while (stream.incrementToken()) { Query currentQuery = newTermQuery(new Term(field, termAtt.getBytesRef())); q.add(currentQuery, BooleanClause.Occur.SHOULD); } return q.build(); }
public static Query fixNegativeQueryIfNeeded(Query q) { if (isNegativeQuery(q)) { BooleanQuery bq = (BooleanQuery) q; BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(bq.isCoordDisabled()); for (BooleanClause clause : bq) { builder.add(clause); } builder.add(newMatchAllQuery(), BooleanClause.Occur.MUST); return builder.build(); } return q; }
/** * Build a filter query for a field using a set of values, taken from the keys * of a {@link NamedList}. * @param field * @param values * @return a filter string. */ private Query buildFilterQuery(String field, Collection<String> values) { BooleanQuery.Builder builder = new BooleanQuery.Builder().setDisableCoord(true); values.stream() .map(v -> new TermQuery(new Term(field, v))) .forEach(tq -> builder.add(tq, Occur.SHOULD)); return builder.build(); }
private static BooleanQuery addClause(BooleanQuery bq, Query query, BooleanClause.Occur occur) { BooleanQuery.Builder newBq = new BooleanQuery.Builder(); newBq.setDisableCoord(bq.isCoordDisabled()); newBq.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch()); for (BooleanClause clause : bq) { newBq.add(clause); } newBq.add(query, occur); return newBq.build(); }
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }
@Override public Query rewrite(Query[] subQueries) { BooleanQuery.Builder merged = new BooleanQuery.Builder(); merged.setDisableCoord(true); for (Query query : subQueries) { merged.add(query, Occur.SHOULD); } return merged.build(); } };
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }
public static Query fixNegativeQueryIfNeeded(Query q) { if (isNegativeQuery(q)) { BooleanQuery bq = (BooleanQuery) q; BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(bq.isCoordDisabled()); for (BooleanClause clause : bq) { builder.add(clause); } builder.add(newMatchAllQuery(), BooleanClause.Occur.MUST); return builder.build(); } return q; }
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }
/** * Builds a new BooleanQuery instance. * <p> * This is intended for subclasses that wish to customize the generated queries. * @param disableCoord disable coord * @return new BooleanQuery instance */ protected BooleanQuery.Builder newBooleanQuery(boolean disableCoord) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(disableCoord); return builder; }
/** * @deprecated review all use of this, don't rely on coord */ @Deprecated protected Query getBooleanQueryCoordDisabled(List<BooleanClause> clauses) throws ParseException { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); for (BooleanClause clause : clauses) { builder.add(clause); } return fixNegativeQueryIfNeeded(builder.build()); }
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }
@Override public Query rewrite(Query[] subQueries) { BooleanQuery.Builder merged = new BooleanQuery.Builder(); merged.setDisableCoord(true); for (Query query : subQueries) { merged.add(query, Occur.SHOULD); } return merged.build(); } };
private static BooleanQuery addClause(BooleanQuery bq, Query query, BooleanClause.Occur occur) { BooleanQuery.Builder newBq = new BooleanQuery.Builder(); newBq.setDisableCoord(bq.isCoordDisabled()); newBq.setMinimumNumberShouldMatch(bq.getMinimumNumberShouldMatch()); for (BooleanClause clause : bq) { newBq.add(clause); } newBq.add(query, occur); return newBq.build(); }
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }
/** * Builds a new BooleanQuery instance. * <p> * This is intended for subclasses that wish to customize the generated queries. * @param disableCoord disable coord * @return new BooleanQuery instance */ protected BooleanQuery.Builder newBooleanQuery(boolean disableCoord) { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(disableCoord); return builder; }
@Override protected BooleanQuery.Builder getTopLevelBuilder() { BooleanQuery.Builder builder = new BooleanQuery.Builder(); builder.setDisableCoord(true); return builder; }