/** * 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() ); }
@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" ); }
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 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 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 ); }