diff --git a/bamboo-specs/src/main/java/buildjob/PlanSpec.java b/bamboo-specs/src/main/java/buildjob/PlanSpec.java index f7905c1..5605ac2 100644 --- a/bamboo-specs/src/main/java/buildjob/PlanSpec.java +++ b/bamboo-specs/src/main/java/buildjob/PlanSpec.java @@ -105,6 +105,7 @@ public class PlanSpec { .dockerConfiguration( new DockerConfiguration() .image("nexus.iqser.com:5001/infra/maven:3.6.2-jdk-13-3.0.0") + .dockerRunArguments("--net=host") .volume("/etc/maven/settings.xml", "/usr/share/maven/ref/settings.xml") .volume("/var/run/docker.sock", "/var/run/docker.sock") ) diff --git a/search-service-image-v1/src/main/docker/Dockerfile b/search-service-image-v1/src/main/docker/Dockerfile index 3ab5072..92171b1 100644 --- a/search-service-image-v1/src/main/docker/Dockerfile +++ b/search-service-image-v1/src/main/docker/Dockerfile @@ -4,15 +4,4 @@ ARG PLATFORM_JAR ENV PLATFORM_JAR ${PLATFORM_JAR} -ENV USES_ELASTICSEARCH false - COPY ["${PLATFORM_JAR}", "/"] - -RUN apt-get update \ - && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - wget cabextract xfonts-utils fonts-liberation \ - && rm -rf /var/lib/apt/lists/* - -RUN curl http://ftp.br.debian.org/debian/pool/contrib/m/msttcorefonts/ttf-mscorefonts-installer_3.7_all.deb -o /tmp/ttf-mscorefonts-installer_3.7_all.deb \ - && dpkg -i /tmp/ttf-mscorefonts-installer_3.7_all.deb \ - && rm /tmp/ttf-mscorefonts-installer_3.7_all.deb \ diff --git a/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/IndexMessage.java b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/IndexMessage.java new file mode 100644 index 0000000..acca197 --- /dev/null +++ b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/IndexMessage.java @@ -0,0 +1,17 @@ +package com.iqser.red.service.search.v1.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class IndexMessage { + + private String dossierId; + private String fileId; + +} diff --git a/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/SearchRequest.java b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/SearchRequest.java new file mode 100644 index 0000000..0ef0324 --- /dev/null +++ b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/model/SearchRequest.java @@ -0,0 +1,21 @@ +package com.iqser.red.service.search.v1.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SearchRequest { + + private String queryString; + private String dossierId; + private String fileId; + private Integer from; + private Integer size; + private boolean returnSections; + +} diff --git a/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/resources/SearchResource.java b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/resources/SearchResource.java new file mode 100644 index 0000000..27bb877 --- /dev/null +++ b/search-service-v1/search-service-api-v1/src/main/java/com/iqser/red/service/search/v1/resources/SearchResource.java @@ -0,0 +1,22 @@ +package com.iqser.red.service.search.v1.resources; + +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +import com.iqser.red.service.search.v1.model.SearchRequest; +import com.iqser.red.service.search.v1.model.SearchResult; + +public interface SearchResource { + + String SEARCH_PATH = "/search"; + + @ResponseBody + @ResponseStatus(value = HttpStatus.OK) + @GetMapping(value = SEARCH_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + SearchResult getDossierStatus(@RequestBody SearchRequest searchRequest); + +} diff --git a/search-service-v1/search-service-server-v1/pom.xml b/search-service-v1/search-service-server-v1/pom.xml index 054a5aa..57d966f 100644 --- a/search-service-v1/search-service-server-v1/pom.xml +++ b/search-service-v1/search-service-server-v1/pom.xml @@ -21,6 +21,17 @@ search-service-api-v1 ${project.version} + + com.iqser.red.service + file-management-service-api-v1 + 2.47.0 + + + com.iqser.red.service + configuration-service-api-v1 + + + diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/Application.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/Application.java index 85750d2..560c26b 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/Application.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/Application.java @@ -5,15 +5,20 @@ import org.springframework.boot.actuate.autoconfigure.security.servlet.Managemen import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import com.iqser.red.commons.spring.DefaultWebMvcConfiguration; import com.iqser.red.service.search.v1.server.client.ElasticsearchClient; +import com.iqser.red.service.search.v1.server.client.FileStatusClient; import com.iqser.red.service.search.v1.server.settings.ElasticsearchSettings; import com.iqser.red.service.search.v1.server.utils.FailfastElasticSearchHealthIndicator; @Import({DefaultWebMvcConfiguration.class}) +@EnableFeignClients(basePackageClasses = FileStatusClient.class) +@EnableConfigurationProperties(ElasticsearchSettings.class) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}) public class Application { diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusClient.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusClient.java new file mode 100644 index 0000000..40bf13c --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusClient.java @@ -0,0 +1,10 @@ +package com.iqser.red.service.search.v1.server.client; + +import org.springframework.cloud.openfeign.FeignClient; + +import com.iqser.red.service.file.management.v1.api.resources.StatusResource; + +@FeignClient(name = "StatusResource", url = "${file-management-service.url}") +public interface FileStatusClient extends StatusResource { + +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusProcessingUpdateClient.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusProcessingUpdateClient.java new file mode 100644 index 0000000..71acd71 --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/client/FileStatusProcessingUpdateClient.java @@ -0,0 +1,9 @@ +package com.iqser.red.service.search.v1.server.client; + +import org.springframework.cloud.openfeign.FeignClient; + +import com.iqser.red.service.file.management.v1.api.resources.FileStatusProcessingUpdateResource; + +@FeignClient(name = "FileStatusProcessingUpdateResource", url = "${file-management-service.url}") +public interface FileStatusProcessingUpdateClient extends FileStatusProcessingUpdateResource { +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/controller/SearchController.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/controller/SearchController.java new file mode 100644 index 0000000..0f90a7b --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/controller/SearchController.java @@ -0,0 +1,26 @@ +package com.iqser.red.service.search.v1.server.controller; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import com.iqser.red.service.search.v1.model.SearchRequest; +import com.iqser.red.service.search.v1.model.SearchResult; +import com.iqser.red.service.search.v1.resources.SearchResource; +import com.iqser.red.service.search.v1.server.service.SearchService; + +import lombok.RequiredArgsConstructor; + +@RestController +@RequiredArgsConstructor +public class SearchController implements SearchResource { + + private final SearchService searchService; + + + public SearchResult getDossierStatus(@RequestBody SearchRequest searchRequest) { + + return searchService.search(searchRequest.getQueryString(), searchRequest.getDossierId(), searchRequest.getFileId(), searchRequest + .getFrom(), searchRequest.getSize(), searchRequest.isReturnSections()); + } + +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java new file mode 100644 index 0000000..af47b97 --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/IndexingMessageReceiver.java @@ -0,0 +1,60 @@ +package com.iqser.red.service.search.v1.server.queue; + +import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.INDEXING_DQL; +import static com.iqser.red.service.search.v1.server.queue.MessagingConfiguration.INDEXING_QUEUE; + +import org.springframework.amqp.rabbit.annotation.RabbitHandler; +import org.springframework.amqp.rabbit.annotation.RabbitListener; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.file.management.v1.api.model.FileStatus; +import com.iqser.red.service.search.v1.model.IndexMessage; +import com.iqser.red.service.search.v1.server.client.FileStatusClient; +import com.iqser.red.service.search.v1.server.client.FileStatusProcessingUpdateClient; +import com.iqser.red.service.search.v1.server.model.Text; +import com.iqser.red.service.search.v1.server.service.DocumentIndexService; +import com.iqser.red.service.search.v1.server.service.TextStorageService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class IndexingMessageReceiver { + + private final ObjectMapper objectMapper; + private final TextStorageService textStorageService; + private final DocumentIndexService documentIndexService; + private final FileStatusClient fileStatusClient; + private final FileStatusProcessingUpdateClient fileStatusProcessingUpdateClient; + + + @RabbitHandler + @RabbitListener(queues = INDEXING_QUEUE) + public void receiveIndexingRequest(String in) throws JsonProcessingException { + + var indexRequest = objectMapper.readValue(in, IndexMessage.class); + log.info("Processing indexing request: {}", indexRequest); + fileStatusProcessingUpdateClient.indexing(indexRequest.getDossierId(), indexRequest.getFileId()); + FileStatus fileStatus = fileStatusClient.getFileStatus(indexRequest.getDossierId(), indexRequest.getFileId()); + Text text = textStorageService.getText(indexRequest.getDossierId(), indexRequest.getDossierId()); + documentIndexService.indexDocument(indexRequest.getDossierId(), indexRequest.getFileId(), fileStatus.getFilename(), text); + fileStatusProcessingUpdateClient.indexingSuccessful(indexRequest.getDossierId(), indexRequest.getFileId()); + log.info("Successfully indexed {}", indexRequest); + + } + + + @RabbitHandler + @RabbitListener(queues = INDEXING_DQL) + public void receiveIndexingRequestDQL(String in) throws JsonProcessingException { + + var indexRequest = objectMapper.readValue(in, IndexMessage.class); + fileStatusProcessingUpdateClient.indexingFailed(indexRequest.getDossierId(), indexRequest.getFileId()); + log.info("Failed to process indexing request: {}", indexRequest); + } + +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java new file mode 100644 index 0000000..417e558 --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/queue/MessagingConfiguration.java @@ -0,0 +1,35 @@ +package com.iqser.red.service.search.v1.server.queue; + +import org.springframework.amqp.core.Queue; +import org.springframework.amqp.core.QueueBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import lombok.RequiredArgsConstructor; + +@Configuration +@RequiredArgsConstructor +public class MessagingConfiguration { + + public static final String INDEXING_QUEUE = "indexingQueue"; + public static final String INDEXING_DQL = "indexingDQL"; + + + @Bean + public Queue indexingQueue() { + + return QueueBuilder.durable(INDEXING_QUEUE) + .withArgument("x-dead-letter-exchange", "") + .withArgument("x-dead-letter-routing-key", INDEXING_DQL) + .maxPriority(2) + .build(); + } + + + @Bean + public Queue indexingDeadLetterQueue() { + + return QueueBuilder.durable(INDEXING_DQL).build(); + } + +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/DocumentIndexService.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/DocumentIndexService.java index f05dbba..592f289 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/DocumentIndexService.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/DocumentIndexService.java @@ -1,14 +1,11 @@ package com.iqser.red.service.search.v1.server.service; import static com.iqser.red.service.search.v1.server.service.IndexCreatorService.INDEX_NAME; -import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_PRIMARY_TERM; -import static org.elasticsearch.index.seqno.SequenceNumbers.UNASSIGNED_SEQ_NO; import java.io.IOException; -import java.util.Optional; +import java.time.OffsetDateTime; import java.util.stream.Collectors; -import org.elasticsearch.action.DocWriteRequest; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.common.xcontent.XContentType; @@ -69,6 +66,7 @@ public class DocumentIndexService { .fileId(fileId) .filename(filename) .sections(text.getSectionTexts().stream().map(this::convert).collect(Collectors.toList())) + .date(OffsetDateTime.now()) .build(); } diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java new file mode 100644 index 0000000..ef8ef82 --- /dev/null +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/service/TextStorageService.java @@ -0,0 +1,52 @@ +package com.iqser.red.service.search.v1.server.service; + +import java.io.IOException; + +import org.springframework.core.io.InputStreamResource; +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.iqser.red.service.file.management.v1.api.model.FileType; +import com.iqser.red.service.search.v1.server.model.Text; +import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; +import com.iqser.red.storage.commons.service.StorageService; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RequiredArgsConstructor +public class TextStorageService { + + private final StorageService storageService; + private final ObjectMapper objectMapper; + + + public Text getText(String dossierId, String fileId) { + + InputStreamResource inputStreamResource; + try { + inputStreamResource = storageService.getObject(StorageIdUtils.getStorageId(dossierId, fileId, FileType.TEXT)); + } catch (StorageObjectDoesNotExist e) { + throw new RuntimeException("Text is not available", e); + } + + try { + return objectMapper.readValue(inputStreamResource.getInputStream(), Text.class); + } catch (IOException e) { + throw new RuntimeException("Could not convert Text", e); + } + } + + + public static class StorageIdUtils { + + public static String getStorageId(String dossierId, String fileId, FileType fileType) { + + return dossierId + "/" + fileId + "." + fileType.name() + fileType.getExtension(); + } + + } + +} diff --git a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/settings/ElasticsearchSettings.java b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/settings/ElasticsearchSettings.java index 766d00b..dd4e0e5 100644 --- a/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/settings/ElasticsearchSettings.java +++ b/search-service-v1/search-service-server-v1/src/main/java/com/iqser/red/service/search/v1/server/settings/ElasticsearchSettings.java @@ -6,10 +6,12 @@ import java.util.List; import org.elasticsearch.action.support.WriteRequest; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import lombok.Data; @Data +@Primary @Configuration @ConfigurationProperties("elasticsearch") public class ElasticsearchSettings { diff --git a/search-service-v1/search-service-server-v1/src/main/resources/application.yml b/search-service-v1/search-service-server-v1/src/main/resources/application.yml index aba19c0..965810f 100644 --- a/search-service-v1/search-service-server-v1/src/main/resources/application.yml +++ b/search-service-v1/search-service-server-v1/src/main/resources/application.yml @@ -1,6 +1,8 @@ info: description: Search Service Server V1 +file-management-service.url: "http://file-management-service-v1:8080" + server: port: 8080 @@ -30,6 +32,13 @@ management: endpoints.web.exposure.include: prometheus, health metrics.export.prometheus.enabled: ${monitoring.enabled:false} +elasticsearch: + hosts: + - ${elasticsearch.cluster.hosts} + port: ${elasticsearch.cluster.port} + scheme: ${elasticsearch.cluster.scheme} + username: ${elasticsearch.cluster.username} + password: ${elasticsearch.cluster.password} storage: signer-type: 'AWSS3V4SignerType' diff --git a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/AbstractElasticsearchIntegrationTest.java b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/AbstractElasticsearchIntegrationTest.java index 32f95c0..8d7159a 100644 --- a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/AbstractElasticsearchIntegrationTest.java +++ b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/AbstractElasticsearchIntegrationTest.java @@ -1,9 +1,12 @@ package com.iqser.red.service.search.v1.server.service; +import java.time.Duration; + import org.assertj.core.util.Lists; import org.junit.ClassRule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.cloud.openfeign.EnableFeignClients; import org.springframework.context.annotation.Bean; @@ -25,6 +28,7 @@ public class AbstractElasticsearchIntegrationTest { public static final String WAIT_FOR_WRITE_REQUESTS = "elasticsearch.refreshPolicy=IMMEDIATE"; + @ClassRule public static ElasticsearchContainer elasticsearchContainer = new ElasticsearchContainer(DockerImageName.parse("nexus.iqser.com:5001/bitnami/elasticsearch:7.13.2-debian-10-r1").asCompatibleSubstituteFor("docker.elastic.co/elasticsearch/elasticsearch")); @@ -38,7 +42,7 @@ public class AbstractElasticsearchIntegrationTest { private AmazonS3 amazonS3; @Configuration - @EnableAutoConfiguration() + @EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class}) @Import(Application.class) @EnableFeignClients(basePackageClasses = TestConfiguration.class) public static class TestConfiguration { diff --git a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java index 41efffc..e7b1377 100644 --- a/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java +++ b/search-service-v1/search-service-server-v1/src/test/java/com/iqser/red/service/search/v1/server/service/IndexCreatorTest.java @@ -1,16 +1,20 @@ package com.iqser.red.service.search.v1.server.service; +import static org.assertj.core.api.Assertions.assertThat; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.core.io.ClassPathResource; import org.springframework.test.context.junit4.SpringRunner; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.search.v1.model.SearchResult; +import com.iqser.red.service.search.v1.server.client.FileStatusClient; +import com.iqser.red.service.search.v1.server.client.FileStatusProcessingUpdateClient; import com.iqser.red.service.search.v1.server.model.Text; @RunWith(SpringRunner.class) @@ -26,6 +30,12 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest { @Autowired private SearchService searchService; + @MockBean + private FileStatusClient fileStatusClient; + + @MockBean + private FileStatusProcessingUpdateClient fileStatusProcessingUpdateClient; + @Test public void test() throws IOException, InterruptedException { @@ -39,12 +49,9 @@ public class IndexCreatorTest extends AbstractElasticsearchIntegrationTest { documentIndexService.indexDocument("dossierId", "fileId", "Single Study - Oral (Gavage) Mouse.pdf", text); documentIndexService.indexDocument("dossierId2", "fileId2", "S-Metolachlor_RAR_01_Volume_1_2018-09-06.pdf", text2); - Thread.sleep(1000); - - SearchResult result = searchService.search("hans klaus single" ,null, null, 0 , 10, false); - - System.out.println(result); + SearchResult result = searchService.search("hans klaus single" ,null, null, 0 , 10, true); + assertThat(result.getMatchedDocuments().size()).isEqualTo(2); } }