BooleanJunction<?> bool = qb.bool(); bool.must(qb.keyword().onField("myCodeSystemVersionPid").matching(csv.getPid()).createQuery()); bool.must(qb.keyword().onField("myParentPids").matching("" + code.getId()).createQuery()); } else { throw new InvalidRequestException("Don't know how to handle op=" + nextFilter.getOp() + " on property " + nextFilter.getProperty()); bool.must(query); bool.must(new TermsQuery(term)); Query luceneQuery = bool.createQuery();
QueryBuilder queryBuilder = getFullTextQueryBuilder(); MustJunction termination = queryBuilder.bool() .must(queryBuilder.keyword().onFields(CommonUtils.empty(tagIds) ? textFields : tagFields) .matching(CommonUtils.empty(tagIds) ? text : tagIds).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); BooleanJunction<BooleanJunction> tempJunction = queryBuilder.bool(); for (Integer categoryId : categoryIds) { tempJunction.should(new TermQuery(new Term("categoryId", categoryId.toString()))); termination.must(tempJunction.createQuery()); BooleanJunction<BooleanJunction> tempJunction = queryBuilder.bool(); for (String modelId : modelIds) { tempJunction.should(new TermQuery(new Term("modelId", modelId))); termination.must(tempJunction.createQuery());
bool.must(qb.keyword().onField("myResourceLinksField").matching(theReferencingPid.toString()).createQuery()); if (bool.isEmpty()) { return pids; bool.must(qb.keyword().onField("myResourceType").matching(theResourceName).createQuery()); Query luceneQuery = bool.createQuery();
@Override public Query getQuery() { BooleanJunction<BooleanJunction> booleanJunction = builder.bool(); for ( Predicate<Query> predicate : children ) { booleanJunction.should( predicate.getQuery() ); } return booleanJunction.createQuery(); } }
.minimumShouldMatchNumber( -1 ) .should( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE3 ).createQuery() ) .createQuery() ); .must( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .minimumShouldMatchNumber( -1 ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchNumber( -1 ) .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() );
.minimumShouldMatchPercent( -50 ) .should( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE3 ).createQuery() ) .createQuery() ); .must( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .minimumShouldMatchPercent( -50 ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchPercent( -40 ) // The minimum should be rounded up to 2 .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() );
@SuppressWarnings({ "rawtypes" }) private FullTextQuery createFullTextQueryForfindExactByAttribute(Map<String, String> eqSentenceOnField) { FullTextSession fullTextSession = getFullTextSession(); QueryBuilder qb = getQueryBuilder(fullTextSession); BooleanJunction<BooleanJunction> combinedQuery = qb.bool(); combinedQuery = addMustPhraseWithAttributesOnFields(eqSentenceOnField, qb, combinedQuery); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(combinedQuery.createQuery()); return fullTextQuery; }
@Test(expected = SearchException.class) public void testIllegalBooleanJunction() { final QueryBuilder monthQb = helper.queryBuilder( Month.class ); //forgetting to set any condition on the boolean, an exception shall be thrown: BooleanJunction<?> booleanJunction = monthQb.bool(); assertTrue( booleanJunction.isEmpty() ); booleanJunction.createQuery(); Assert.fail( "should not reach this point" ); }
@SuppressWarnings("rawtypes") private BooleanJunction<BooleanJunction> addShouldKeywordsWithAttributesOnFields(Map<String, String> eqSentenceOnField, QueryBuilder qb, BooleanJunction<BooleanJunction> combinedQuery) { for(String field : eqSentenceOnField.keySet()){ String value = eqSentenceOnField.get(field); Query luceneQuery = qb.keyword() .onField(field) .matching(value) .createQuery(); combinedQuery.should(luceneQuery); //must(luceneQuery); } return combinedQuery; }
@Override public Query visit(OrExpr orExpr) { BooleanJunction<BooleanJunction> booleanJunction = queryBuilder.bool(); for (BooleanExpr c : orExpr.getChildren()) { Query transformedChild = c.acceptVisitor(this); booleanJunction.should(transformedChild); } return booleanJunction.createQuery(); }
private void addDisplayFilterExact(QueryBuilder qb, BooleanJunction<?> bool, ValueSet.ConceptSetFilterComponent nextFilter) { bool.must(qb.phrase().onField("myDisplay").sentence(nextFilter.getValue()).createQuery()); }
.minimumShouldMatchNumber( 1 ) .should( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE3 ).createQuery() ) .createQuery() ); .must( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .minimumShouldMatchNumber( 1 ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchNumber( 2 ) .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchNumber( 2 ) .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .createQuery() );
.minimumShouldMatchPercent( 50 ) .should( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE3 ).createQuery() ) .createQuery() ); .must( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .minimumShouldMatchPercent( 50 ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchPercent( 70 ) // The minimum should be rounded down to 2 .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); .minimumShouldMatchPercent( 100 ) .should( queryBuilder.keyword().onField( "field4" ).matching( FIELD4_VALUE1AND2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .createQuery() );
@SuppressWarnings({ "rawtypes" }) private FullTextQuery createFullTextQueryForfindNotExactByAttributeWKeywords(Map<String, String> eqSentenceOnField) { FullTextSession fullTextSession = getFullTextSession(); QueryBuilder qb = getQueryBuilder(fullTextSession); BooleanJunction<BooleanJunction> combinedQuery = qb.bool(); combinedQuery = addShouldKeywordsWithAttributesOnFields(eqSentenceOnField, qb, combinedQuery); FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(combinedQuery.createQuery()); return fullTextQuery; }
@SuppressWarnings("rawtypes") private BooleanJunction<BooleanJunction> addShouldPhraseWithAttributesOnFields(Map<String, String> eqSentenceOnField, QueryBuilder qb, BooleanJunction<BooleanJunction> combinedQuery) { for(String field : eqSentenceOnField.keySet()){ String value = eqSentenceOnField.get(field); Query luceneQuery = qb.phrase() .onField(field) .sentence(value) .createQuery(); combinedQuery.should(luceneQuery); //must(luceneQuery); } return combinedQuery; }
@Override public Query visit(NotExpr notExpr) { Query transformedChild = notExpr.getChild().acceptVisitor(this); return queryBuilder.bool().must(transformedChild).not().createQuery(); }
QueryBuilder queryBuilder = getFullTextQueryBuilder(); MustJunction termination = queryBuilder.bool() .must(queryBuilder.keyword().onFields(CommonUtils.empty(tagIds) ? textFields : tagFields) .matching(CommonUtils.empty(tagIds) ? text : tagIds).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); BooleanJunction<BooleanJunction> tempJunction = queryBuilder.bool(); for (Integer categoryId : categoryIds) { tempJunction.should(new TermQuery(new Term("categoryId", categoryId.toString()))); termination.must(tempJunction.createQuery()); BooleanJunction<BooleanJunction> tempJunction = queryBuilder.bool(); for (String modelId : modelIds) { tempJunction.should(new TermQuery(new Term("modelId", modelId))); termination.must(tempJunction.createQuery());
@Override public Query visit(OrExpr orExpr) { BooleanJunction<BooleanJunction> booleanJunction = queryBuilder.bool(); for (BooleanExpr c : orExpr.getChildren()) { Query transformedChild = c.acceptVisitor(this); booleanJunction.should(transformedChild); } return booleanJunction.createQuery(); }
private void addDisplayFilterInexact(QueryBuilder qb, BooleanJunction<?> bool, ValueSet.ConceptSetFilterComponent nextFilter) { Query textQuery = qb .phrase() .withSlop(2) .onField("myDisplay").boostedTo(4.0f) .andField("myDisplayEdgeNGram").boostedTo(2.0f) // .andField("myDisplayNGram").boostedTo(1.0f) // .andField("myDisplayPhonetic").boostedTo(0.5f) .sentence(nextFilter.getValue().toLowerCase()).createQuery(); bool.must(textQuery); }