'Springboot JPA ElasticSearch search is faster than ElasticsearchRestTemplate search

So I just compared the time for doing 3 calls to the remote ElasticSearch server using JPA vs 1 call to the remote ElasticSearch server using ElasticsearchRestTemplate. I saw that the 3 calls take 2 seconds and the call using ElasticsearchRestTemplate takes 3 seconds. Why?

For the call to the server using JPA I have an ElasticSearchRepository like this:

public interface ScResultsRepository extends ElasticsearchRepository<ScResults, String> {
    List<ScResults> findAllBySenderAndDataStartsWithOrderByTimestampAsc(String sender, String dataStartWith);
}

And I call the server like this:

List<ScResults> results1 = scResultsRepository.findAllBySenderAndDataStartsWithOrderByTimestampAsc(
        "sendervalue", encodedString1);
List<ScResults> results2 = scResultsRepository.findAllBySenderAndDataStartsWithOrderByTimestampAsc(
        "sendervalue", encodedString2);
List<ScResults> results3 = scResultsRepository.findAllBySenderAndDataStartsWithOrderByTimestampAsc(
        "sendervalue", encodedString3);

To call the ElasticSearch server using ElasticsearchRestTemplate:

QueryBuilder prefixQueryBuilderAddLiquidity = QueryBuilders.prefixQuery("data.keyword", encodedString1);
QueryBuilder prefixQueryBuilderDeleteLiquidity = QueryBuilders.prefixQuery("data.keyword", encodedString2);
QueryBuilder prefixQueryBuilderExitFarm = QueryBuilders.prefixQuery("data.keyword", encodedString3);

QueryBuilder dataBoolQuery = QueryBuilders.boolQuery()
        .should(prefixQueryBuilderAddLiquidity)
        .should(prefixQueryBuilderDeleteLiquidity)
        .should(prefixQueryBuilderExitFarm);
QueryBuilder boolQuery = QueryBuilders.boolQuery()
        .filter(QueryBuilders.termQuery("sender.keyword", "sendervalue"))
        .filter(dataBoolQuery);
Query searchQuery = new NativeSearchQueryBuilder()
        .withFilter(boolQuery)
        .withSorts(SortBuilders.fieldSort("timestamp").order(SortOrder.ASC))
        .build();
SearchHits<ScResults> resultsSearchHits = elasticsearchTemplate.search(searchQuery, ScResults.class);


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source