public SearchPredicate extendedPredicate(String fieldName, String value) { return delegate.match().onField( fieldName ).matching( value ).toPredicate(); } }
@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" ); }
@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" ); }
@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() ); }
@Test public void should_mustNot() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool() .should( f.match().onField( "field1" ).matching( FIELD1_VALUE1 ) ) .should( f.match().onField( "field1" ).matching( FIELD1_VALUE3 ) ) .mustNot( f.match().onField( "field1" ).matching( FIELD1_VALUE1 ) ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_3 ); }
private SearchResultAssert<DocumentReference> assertMatchQuery(String valueToMatch) { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( indexMapping.field.relativeFieldName ).matching( valueToMatch ).toPredicate() ) .build(); return assertThat( query ); }
@Test public void should_function() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool() .should( f2 -> f2.match().onField( "field1" ).matching( FIELD1_VALUE1 ).toPredicate() ) .should( f2 -> f2.match().onField( "field1" ).matching( FIELD1_VALUE2 ).toPredicate() ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_2 ); }
@Test public void match_fluid() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( "string" ).matching( STRING_1 ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
@Test public void match_emptyStringBeforeAnalysis() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); MainFieldModel fieldModel = indexMapping.analyzedStringField; SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( fieldModel.relativeFieldName ).matching( "" ).toPredicate() ) .build(); assertThat( query ) .hasNoHits(); }
@Test public void match_noTokenAfterAnalysis() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); MainFieldModel fieldModel = indexMapping.analyzedStringField; SearchQuery<DocumentReference> query = searchTarget.query() .asReference() // Use a stopword, which should be removed by the analysis .predicate( f -> f.match().onField( fieldModel.relativeFieldName ).matching( "a" ).toPredicate() ) .build(); assertThat( query ) .hasNoHits(); }
@Test public void match_lambda() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( "string" ).matching( STRING_1 ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
@Test public void match() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); for ( ByTypeFieldModel<?> fieldModel : indexMapping.supportedFieldModels ) { String absoluteFieldPath = fieldModel.relativeFieldName; Object valueToMatch = fieldModel.predicateParameterValue; SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( absoluteFieldPath ).matching( valueToMatch ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); } }
@Test public void match_search_predicate() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchPredicate predicate = searchTarget.predicate().match().onField( "string" ).matching( STRING_1 ).toPredicate(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( predicate ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
@Test public void search_across_multiple_indexes() { StubMappingSearchTarget searchTarget = indexManager_1_1.createSearchTarget( indexManager_1_2 ); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( "string" ).matching( STRING_1 ).toPredicate() ) .build(); assertThat( query ).hasDocRefHitsAnyOrder( c -> { c.doc( INDEX_NAME_1_1, DOCUMENT_1_1_1 ); c.doc( INDEX_NAME_1_2, DOCUMENT_1_2_1 ); } ); }
@Test public void match_withDslConverter() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); for ( ByTypeFieldModel<?> fieldModel : indexMapping.supportedFieldWithDslConverterModels ) { String absoluteFieldPath = fieldModel.relativeFieldName; Object valueToMatch = new ValueWrapper<>( fieldModel.predicateParameterValue ); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.match().onField( absoluteFieldPath ).matching( valueToMatch ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); } }
@Test public void mustNot_function() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool() .mustNot( f2 -> f2.match().onField( "field1" ).matching( FIELD1_VALUE1 ).toPredicate() ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_2, DOCUMENT_3 ); }
@Test public void must_function() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool() .must( f2 -> f2.match().onField( "field1" ).matching( FIELD1_VALUE1 ).toPredicate() ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
@Test public void mustNot_separatePredicateObject() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchPredicate predicate = searchTarget.predicate().match().onField( "field1" ).matching( FIELD1_VALUE2 ).toPredicate(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool() .mustNot( predicate ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_3 ); }
@Test public void must_separatePredicateObject() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchPredicate predicate = searchTarget.predicate().match().onField( "field1" ).matching( FIELD1_VALUE1 ).toPredicate(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.bool().must( predicate ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
@Test public void countQueryWithProjection() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<String> query = searchTarget.query() .asProjection( f -> f.field( "string", String.class ).toProjection() ) .predicate( f -> f.matchAll().toPredicate() ) .build(); assertEquals( 2L, query.executeCount() ); query = searchTarget.query() .asProjection( f -> f.field( "string", String.class ).toProjection() ) .predicate( f -> f.match().onField( "string" ).matching( STRING_VALUE ).toPredicate() ) .build(); assertEquals( 1L, query.executeCount() ); }