.must(queryBuilder.keyword().onFields(CommonUtils.empty(tagId) ? textFields : tagFields) .matching(CommonUtils.empty(tagId) ? text : tagId).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); if (null != startPublishDate) { termination.must(queryBuilder.range().onField("publishDate").above(startPublishDate).createQuery()); termination.must(queryBuilder.range().onField("publishDate").below(endPublishDate).createQuery()); valueMap.put("modelId", Arrays.asList(modelIds)); FullTextQuery query = getFullTextQuery(termination.createQuery()); if ("publishDate".equals(orderField)) { Sort sort = new Sort(new SortField("publishDate", SortField.Type.LONG, true));
@Test @TestForIssue(jiraKey = "HSEARCH-2565") public void testBooleanWithNullClauses() throws Exception { final QueryBuilder monthQb = helper.queryBuilder( Month.class ); // must/should with null clauses Query query = monthQb .bool() .must( null ) .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .should( null ) .createQuery(); Assert.assertThat( query, CoreMatchers.instanceOf( BooleanQuery.class ) ); Assert.assertEquals( 1, ( (BooleanQuery) query ).clauses().size() ); helper.assertThat( query ).from( Month.class ).matchesExactlyIds( 1 ); // must not / filter with null clauses query = monthQb .bool() .must( null ).not() .must( null ).disableScoring() .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .createQuery(); Assert.assertThat( query, CoreMatchers.instanceOf( BooleanQuery.class ) ); Assert.assertEquals( 1, ( (BooleanQuery) query ).clauses().size() ); helper.assertThat( query ).from( Month.class ).matchesExactlyIds( 1 ); }
@Override public Query visit(NotExpr notExpr) { Query transformedChild = notExpr.getChild().acceptVisitor(this); return queryBuilder.bool().must(transformedChild).not().createQuery(); }
public void testBooleanQueriesMustNot() throws ParseException { loadTestingData(); Query query = Search.getSearchManager(cache).buildQueryBuilderForClass(Person.class).get().bool() .must(createQueryParser("name").parse("Goat")).not().createQuery(); CacheQuery<Person> cacheQuery = Search.getSearchManager(cache).getQuery(query); List<Person> found = cacheQuery.list(); assertEquals(1, found.size()); assert found.contains(person1); query = Search.getSearchManager(cache).buildQueryBuilderForClass(Person.class).get().bool() .must(createQueryParser("name").parse("Goat")).createQuery(); cacheQuery = Search.getSearchManager(cache).getQuery(query); found = cacheQuery.list(); assertEquals(2, found.size()); assert found.contains(person2); assert found.contains(person3); }
@Test public void must_mustNot() { QueryBuilder queryBuilder = helper.queryBuilder( IndexedEntity.class ); HSQuery query = helper.hsQuery( queryBuilder.bool() .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ).not() .createQuery() ); helper.assertThat( query ).matchesNone(); query = helper.hsQuery( queryBuilder.bool() .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ) .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE2 ).createQuery() ).not() .createQuery() ); helper.assertThat( query ) .matchesUnorderedIds( DOCUMENT_1 ); }
@Override public List<Artifact> searchAutocompleteWithoutProject(String searchPattern, Integer limit, Integer offset) throws ServiceException { String[] searchFields = new String[] { Binding.artifact().artifactId().getPath(), Binding.artifact().group().groupId().getPath() }; QueryBuilder queryBuilder = Search.getFullTextEntityManager(getEntityManager()).getSearchFactory().buildQueryBuilder() .forEntity(Artifact.class).get(); Query notDeprecatedQuery = queryBuilder.keyword().onField(Binding.artifact().deprecationStatus().getPath()).matching(ArtifactDeprecationStatus.NORMAL).createQuery(); Query withoutProjectQuery = queryBuilder.keyword().onField(Binding.artifact().project().getPath()).matching(null).createQuery(); BooleanJunction<?> booleanJunction = queryBuilder.bool() .must(notDeprecatedQuery) .must(withoutProjectQuery); List<SortField> sortFields = ImmutableList.<SortField>builder() .add(new SortField(Binding.artifact().group().getPath() + '.' + ArtifactGroup.GROUP_ID_SORT_FIELD_NAME, SortField.Type.STRING)) .add(new SortField(Artifact.ARTIFACT_ID_SORT_FIELD_NAME, SortField.Type.STRING)) .build(); Sort sort = new Sort(sortFields.toArray(new SortField[sortFields.size()])); return hibernateSearchService.searchAutocomplete(getObjectClass(), searchFields, searchPattern, booleanJunction.createQuery(), limit, offset, sort); }
@Test @TestForIssue(jiraKey = "HSEARCH-2034") public void testBooleanWithoutScoring() throws Exception { final QueryBuilder monthQb = helper.queryBuilder( Month.class ); //must + disable scoring Query query = monthQb .bool() .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .disableScoring() .createQuery(); helper.assertThat( query ).from( Month.class ).matchesExactlyIds( 1 ); assertTrue( query instanceof BooleanQuery ); BooleanQuery bq = (BooleanQuery) query; BooleanClause firstBooleanClause = bq.clauses().get( 0 ); assertFalse( firstBooleanClause.isScoring() ); }
queryBuilder.bool() .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() )
@Override public Query visit(NotExpr notExpr) { Query transformedChild = notExpr.getChild().acceptVisitor(this); return queryBuilder.bool().must(transformedChild).not().createQuery(); }
.bool() .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .createQuery(); .should( monthQb.all().createQuery() ) .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .not() .createQuery(); .bool() .must( monthQb.keyword().onField( "mythology" ).matching( "colder" ).createQuery() ) .not() .createQuery();
@Test public void filter_should() { QueryBuilder queryBuilder = helper.queryBuilder( IndexedEntity.class ); // A boolean predicate with filter + should clauses: // documents should match regardless of whether should clauses match. // Non-matching "should" clauses HSQuery query = helper.hsQuery( queryBuilder.bool() .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ).disableScoring() .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE2 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); helper.assertThat( query ) .matchesUnorderedIds( DOCUMENT_1 ); // One matching and one non-matching "should" clause query = helper.hsQuery( queryBuilder.bool() .must( queryBuilder.keyword().onField( "field1" ).matching( FIELD1_VALUE1 ).createQuery() ).disableScoring() .should( queryBuilder.keyword().onField( "field2" ).matching( FIELD2_VALUE1 ).createQuery() ) .should( queryBuilder.keyword().onField( "field3" ).matching( FIELD3_VALUE3 ).createQuery() ) .createQuery() ); helper.assertThat( query ) .matchesUnorderedIds( DOCUMENT_1 ); }
queryBuilder.bool() .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() )
.must(queryBuilder.keyword().onFields(CommonUtils.empty(tagId) ? textFields : tagFields) .matching(CommonUtils.empty(tagId) ? text : tagId).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); if (null != startPublishDate) { termination.must(queryBuilder.range().onField("publishDate").above(startPublishDate).createQuery()); termination.must(queryBuilder.range().onField("publishDate").below(endPublishDate).createQuery()); valueMap.put("modelId", Arrays.asList(modelIds)); FullTextQuery query = getFullTextQuery(termination.createQuery()); if ("publishDate".equals(orderField)) { Sort sort = new Sort(new SortField("publishDate", SortField.Type.LONG, true));
@Override public Query getQuery() { return builder.bool().must( getChild().getQuery() ).not().createQuery(); }
.must(queryBuilder.keyword().onFields(CommonUtils.empty(tagIds) ? textFields : tagFields) .matching(CommonUtils.empty(tagIds) ? text : tagIds).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); if (null != startPublishDate) { termination.must(queryBuilder.range().onField("publishDate").above(startPublishDate).createQuery()); termination.must(queryBuilder.range().onField("publishDate").below(endPublishDate).createQuery()); tempJunction.should(new TermQuery(new Term("categoryId", categoryId.toString()))); termination.must(tempJunction.createQuery()); tempJunction.should(new TermQuery(new Term("modelId", modelId))); termination.must(tempJunction.createQuery()); FullTextQuery query = getFullTextQuery(termination.createQuery()); if ("publishDate".equals(orderField)) { Sort sort = new Sort(new SortField("publishDate", SortField.Type.LONG, true));
@Override public Query visit(ConstantBooleanExpr constantBooleanExpr) { Query all = queryBuilder.all().createQuery(); return constantBooleanExpr.getValue() ? all : queryBuilder.bool().must(all).not().createQuery(); }
.must(queryBuilder.keyword().onFields(CommonUtils.empty(tagIds) ? textFields : tagFields) .matching(CommonUtils.empty(tagIds) ? text : tagIds).createQuery()) .must(new TermQuery(new Term("siteId", siteId.toString()))); if (null != startPublishDate) { termination.must(queryBuilder.range().onField("publishDate").above(startPublishDate).createQuery()); termination.must(queryBuilder.range().onField("publishDate").below(endPublishDate).createQuery()); tempJunction.should(new TermQuery(new Term("categoryId", categoryId.toString()))); termination.must(tempJunction.createQuery()); tempJunction.should(new TermQuery(new Term("modelId", modelId))); termination.must(tempJunction.createQuery()); FullTextQuery query = getFullTextQuery(termination.createQuery()); if ("publishDate".equals(orderField)) { Sort sort = new Sort(new SortField("publishDate", SortField.Type.LONG, true));
@Override public Query visit(ConstantBooleanExpr constantBooleanExpr) { Query all = queryBuilder.all().createQuery(); return constantBooleanExpr.getValue() ? all : queryBuilder.bool().must(all).not().createQuery(); }
.must(textQuery) .createQuery();
@Override public Query getQuery() { BooleanJunction<BooleanJunction> booleanJunction = builder.bool(); for ( Predicate<Query> predicate : children ) { // minor optimization: unwrap negated predicates and add child directly to this // predicate if ( predicate.getType() == Type.NEGATION ) { booleanJunction.must( predicate.as( LuceneNegationPredicate.class ).getChild().getQuery() ).not(); } else { booleanJunction.must( predicate.getQuery() ); } } return booleanJunction.createQuery(); } }