/** * Add a <a href="#mustnot">"must not" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext mustNot(SearchPredicateTerminalContext terminalContext) { return mustNot( terminalContext.toPredicate() ); }
/** * Add a "must not" clause based on an almost-built {@link SearchPredicate}. * <p> * Documents matching the "must not" clause won't match the "match all" predicate. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return A context allowing to get the resulting predicate. */ default MatchAllPredicateContext except(SearchPredicateTerminalContext terminalContext) { return except( terminalContext.toPredicate() ); } /*
/** * Set the inner predicate to an almost-built {@link SearchPredicate}. * <p> * Matching documents are those for which at least one element of the nested object field * matches the inner predicate. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return A context allowing to get the resulting predicate. */ default SearchPredicateTerminalContext nest(SearchPredicateTerminalContext terminalContext) { return nest( terminalContext.toPredicate() ); }
/** * Add a <a href="#should">"should" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext should(SearchPredicateTerminalContext terminalContext) { return should( terminalContext.toPredicate() ); }
/** * Add a "must not" clause based on an almost-built {@link SearchPredicate}. * <p> * Documents matching the "must not" clause won't match the "match all" predicate. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return A context allowing to get the resulting predicate. */ default MatchAllPredicateContext except(SearchPredicateTerminalContext terminalContext) { return except( terminalContext.toPredicate() ); } /*
/** * Add a <a href="#must">"must" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext must(SearchPredicateTerminalContext terminalContext) { return must( terminalContext.toPredicate() ); }
/** * Add a <a href="#filter">"filter" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext filter(SearchPredicateTerminalContext terminalContext) { return filter( terminalContext.toPredicate() ); }
/** * Add a <a href="#filter">"filter" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext filter(SearchPredicateTerminalContext terminalContext) { return filter( terminalContext.toPredicate() ); }
/** * Add a <a href="#must">"must" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext must(SearchPredicateTerminalContext terminalContext) { return must( terminalContext.toPredicate() ); }
/** * Add a <a href="#mustnot">"must not" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext mustNot(SearchPredicateTerminalContext terminalContext) { return mustNot( terminalContext.toPredicate() ); }
/** * Add a <a href="#should">"should" clause</a> based on an almost-built {@link SearchPredicate}. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return {@code this}, for method chaining. */ default BooleanJunctionPredicateContext should(SearchPredicateTerminalContext terminalContext) { return should( terminalContext.toPredicate() ); }
/** * Set the inner predicate to an almost-built {@link SearchPredicate}. * <p> * Matching documents are those for which at least one element of the nested object field * matches the inner predicate. * * @param terminalContext The terminal context allowing to retrieve a {@link SearchPredicate}. * @return A context allowing to get the resulting predicate. */ default SearchPredicateTerminalContext nest(SearchPredicateTerminalContext terminalContext) { return nest( terminalContext.toPredicate() ); }
public SearchPredicate extendedPredicate(String fieldName, String value) { return delegate.match().onField( fieldName ).matching( value ).toPredicate(); } }
@Test public void getQueryString() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( "string" ).matching( "platypus" ).toPredicate() ) .build(); assertThat( query.getQueryString() ).contains( "platypus" ); }
@Test public void queryWrapper() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); QueryWrapper queryWrapper = searchTarget.query() .asReference( QueryWrapper::new ) .predicate( f -> f.match().onField( "string" ).matching( "platypus" ).toPredicate() ) .build(); assertThat( queryWrapper.query.getQueryString() ).contains( "platypus" ); }
@Override public Optional<Book> getByIsbn(String isbnAsString) { if ( isbnAsString == null ) { return Optional.empty(); } // Must use Hibernate ORM types (as opposed to JPA types) to benefit from query.uniqueResult() FullTextSession fullTextSession = entityManager.unwrap( FullTextSession.class ); org.hibernate.search.mapper.orm.hibernate.FullTextQuery<Book> query = fullTextSession.search( Book.class ).query() .asEntity() // TODO allow to bypass the bridge in the DSL .predicate( f -> f.match().onField( "isbn" ).matching( new ISBN( isbnAsString ) ).toPredicate() ) .build(); return Optional.ofNullable( query.uniqueResult() ); }
@Override public Optional<Book> getByIsbn(String isbnAsString) { if ( isbnAsString == null ) { return Optional.empty(); } // Must use Hibernate ORM types (as opposed to JPA types) to benefit from query.uniqueResult() FullTextSession fullTextSession = entityManager.unwrap( FullTextSession.class ); org.hibernate.search.mapper.orm.hibernate.FullTextSearchTarget<Book> target = fullTextSession.search( Book.class ); org.hibernate.search.mapper.orm.hibernate.FullTextQuery<Book> query = target.query() .asEntity() .predicate( // TODO allow to bypass the bridge in the DSL target.predicate().match().onField( "isbn" ).matching( new ISBN( isbnAsString ) ).toPredicate() ) .build(); return Optional.ofNullable( query.uniqueResult() ); }
@Test public void unknown_field() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SubTest.expectException( "spatial().within().circle() predicate on unknown field", () -> searchTarget.predicate().spatial().within().onField( "unknown_field" ) .circle( METRO_GARIBALDI, 100 ).toPredicate() ) .assertThrown() .isInstanceOf( SearchException.class ) .hasMessageContaining( "Unknown field" ) .hasMessageContaining( "'unknown_field'" ); } }
@Test public void unknown_field() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SubTest.expectException( "spatial().within().boundingBox() predicate on unknown field", () -> searchTarget.predicate().spatial().within().onField( "unknown_field" ) .boundingBox( BOUNDING_BOX_1 ).toPredicate() ) .assertThrown() .isInstanceOf( SearchException.class ) .hasMessageContaining( "Unknown field" ) .hasMessageContaining( "'unknown_field'" ); }
@Test public void unknown_field() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SubTest.expectException( "spatial().within().polygon() predicate on unknown field", () -> searchTarget.predicate().spatial().within().onField( "unknown_field" ) .polygon( POLYGON_1 ).toPredicate() ) .assertThrown() .isInstanceOf( SearchException.class ) .hasMessageContaining( "Unknown field" ) .hasMessageContaining( "'unknown_field'" ); }