@Test public void matchAll_multipleExcepts() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll() .except( f.match().onField( "string" ).matching( STRING_1 ) ) .except( f.match().onField( "string" ).matching( STRING_2 ) ) .toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_3 ); SearchPredicate searchPredicate1 = searchTarget.predicate().match().onField( "string" ).matching( STRING_3 ).toPredicate(); SearchPredicate searchPredicate2 = searchTarget.predicate().match().onField( "string" ).matching( STRING_2 ).toPredicate(); query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().except( searchPredicate1 ).except( searchPredicate2 ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1 ); }
private void assertBookNumberIsEqualsTo(long bookNumber, StubSessionContext sessionContext) { SearchQuery<DocumentReference> query = indexManager.createSearchTarget().query( sessionContext ) .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); Assertions.assertThat( query.executeCount() ).isEqualTo( bookNumber ); }
/** * 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() ); } /*
@Test public void references_referenceTransformer() { DocumentReference mainReference = reference( INDEX_NAME, MAIN_ID ); DocumentReference emptyReference = reference( INDEX_NAME, EMPTY_ID ); StubTransformedReference mainTransformedReference = new StubTransformedReference( mainReference ); StubTransformedReference emptyTransformedReference = new StubTransformedReference( emptyReference ); Function<DocumentReference, StubTransformedReference> referenceTransformerMock = EasyMock.createMock( StubDocumentReferenceTransformer.class ); ObjectLoader<StubTransformedReference, StubLoadedObject> objectLoaderMock = EasyMock.createMock( StubObjectLoader.class ); GenericStubMappingSearchTarget<StubTransformedReference, StubLoadedObject> searchTarget = indexManager.createSearchTarget( referenceTransformerMock ); SearchQuery<StubTransformedReference> referencesQuery = searchTarget.query( objectLoaderMock ) .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); EasyMock.expect( referenceTransformerMock.apply( referenceMatcher( mainReference ) ) ) .andReturn( mainTransformedReference ); EasyMock.expect( referenceTransformerMock.apply( referenceMatcher( emptyReference ) ) ) .andReturn( emptyTransformedReference ); EasyMock.replay( referenceTransformerMock, objectLoaderMock ); assertThat( referencesQuery ).hasHitsAnyOrder( mainTransformedReference, emptyTransformedReference ); EasyMock.verify( referenceTransformerMock, objectLoaderMock ); }
/** * 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() ); } /*
@Test public void checkAllDocumentsAreSearchable() { IndexDocumentWorkExecutor<? extends DocumentElement> documentWorkExecutor = indexManager.createDocumentWorkExecutor(); CompletableFuture[] tasks = new CompletableFuture[NUMBER_OF_BOOKS]; IndexWorkExecutor workExecutor = indexManager.createWorkExecutor(); for ( int i = 0; i < NUMBER_OF_BOOKS; i++ ) { final String id = i + ""; tasks[i] = documentWorkExecutor.add( referenceProvider( id ), document -> { indexAccessors.title.write( document, "The Lord of the Rings cap. " + id ); } ); } CompletableFuture.allOf( tasks ).join(); workExecutor.flush().join(); SearchQuery<DocumentReference> query = indexManager.createSearchTarget().query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); Assertions.assertThat( query.executeCount() ).isEqualTo( NUMBER_OF_BOOKS ); }
@Test public void matchAll_except() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().except( c2 -> c2.match().onField( "string" ).matching( STRING_1 ).toPredicate() ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_2, DOCUMENT_3 ); SearchPredicate searchPredicate = searchTarget.predicate().match().onField( "string" ).matching( STRING_2 ).toPredicate(); query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().except( searchPredicate ).toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_3 ); }
.predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( objectsQuery ).hasHitsExactOrder( mainLoadedObject, emptyLoadedObject );
private SearchQuery<DocumentReference> sortQuery(Consumer<? super SearchSortContainerContext> sortContributor) { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); return searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .sort( sortContributor ) .build(); }
@Test public void compositeList_fromTerminalContexts() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<List<?>> query = searchTarget.query() .asProjection( f -> f.composite( f.field( indexMapping.author.relativeFieldName, String.class ), f.field( indexMapping.title.relativeFieldName, String.class ) ) .toProjection() ) .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ).hasHitsAnyOrder( Arrays.asList( indexMapping.author.document1Value.indexedValue, indexMapping.title.document1Value.indexedValue ), Arrays.asList( indexMapping.author.document2Value.indexedValue, indexMapping.title.document2Value.indexedValue ), Arrays.asList( indexMapping.author.document3Value.indexedValue, indexMapping.title.document3Value.indexedValue ) ); }
private SearchQuery<DocumentReference> simpleQuery(Consumer<? super SearchSortContainerContext> sortContributor) { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); return searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .sort( sortContributor ) .build(); }
private SearchQuery<DocumentReference> simpleQuery(Consumer<? super SearchSortContainerContext> sortContributor) { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); return searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .sort( sortContributor ) .build(); }
private void initData(Consumer<AnalysisITDocumentBuilder> valueContributor) { IndexWorkPlan<? extends DocumentElement> workPlan = indexManager.createWorkPlan(); List<String> documentIds = new ArrayList<>(); valueContributor.accept( (String documentId, String ... fieldValues) -> { documentIds.add( documentId ); workPlan.add( referenceProvider( documentId ), document -> { for ( String fieldValue : fieldValues ) { indexMapping.field.write( document, fieldValue ); } } ); } ); workPlan.execute().join(); // Check that all documents are searchable StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( c -> { for ( String documentId : documentIds ) { c.doc( INDEX_NAME, documentId ); } } ); }
private void checkAllDocumentsAreSearchable() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ).hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_2, DOCUMENT_3, DOCUMENT_4, DOCUMENT_5 ); }
@Override public long count() { FullTextSession fullTextSession = entityManager.unwrap( FullTextSession.class ); FullTextQuery<Book> query = fullTextSession.search( Book.class ).query() .asEntity() .predicate( f -> f.matchAll().toPredicate() ) .build(); return query.getResultSize(); }
/** * Test that mentioning the same projection twice works as expected. */ @Test public void duplicated() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); for ( FieldModel<?> fieldModel : indexMapping.supportedFieldModels ) { SubTest.expectSuccess( fieldModel, model -> { String fieldPath = model.relativeFieldName; assertThat( searchTarget.query() .asProjection( f -> f.composite( f.field( fieldPath, model.type ), f.field( fieldPath, model.type ) ) .toProjection() ) .predicate( f -> f.matchAll().toPredicate() ) .build() ).hasHitsAnyOrder( Arrays.asList( model.document1Value.indexedValue, model.document1Value.indexedValue ), Arrays.asList( model.document2Value.indexedValue, model.document2Value.indexedValue ), Arrays.asList( model.document3Value.indexedValue, model.document3Value.indexedValue ), Arrays.asList( null, null ) // Empty document ); } ); } }
@Test public void compositeList_fromSearchProjectionObjects() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<List<?>> query = searchTarget.query() .asProjection( f -> f.composite( f.field( indexMapping.author.relativeFieldName, String.class ).toProjection(), f.field( indexMapping.title.relativeFieldName, String.class ).toProjection() ) .toProjection() ) .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ).hasHitsAnyOrder( Arrays.asList( indexMapping.author.document1Value.indexedValue, indexMapping.title.document1Value.indexedValue ), Arrays.asList( indexMapping.author.document2Value.indexedValue, indexMapping.title.document2Value.indexedValue ), Arrays.asList( indexMapping.author.document3Value.indexedValue, indexMapping.title.document3Value.indexedValue ) ); }
@Test public void noProjections() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<List<?>> query = searchTarget.query() .asProjections() .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ).hasHitCount( 4 ); }
@Test public void references_noReferenceTransformer() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, MAIN_ID, EMPTY_ID ); }
@Test public void matchAll() { StubMappingSearchTarget searchTarget = indexManager.createSearchTarget(); SearchQuery<DocumentReference> query = searchTarget.query() .asReference() .predicate( f -> f.matchAll().toPredicate() ) .build(); assertThat( query ) .hasDocRefHitsAnyOrder( INDEX_NAME, DOCUMENT_1, DOCUMENT_2, DOCUMENT_3 ); }