如何通过ElasticsearchRestTemplate在参数后使用terminate_向elastic发送搜索请求?

如何通过ElasticsearchRestTemplate在参数后使用terminate_向elastic发送搜索请求?,
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我确实请求使用ElasticsearchRestTemplate为文档实体创建ElasticCluster。我的刀类: import lombok.RequiredArgsConstructor; import org.jetbrains.annotations.NotNull; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data

我确实请求使用ElasticsearchRestTemplate为文档实体创建ElasticCluster。我的刀类:

import lombok.RequiredArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Component;
import APP_PACKAGE.dto.request.DocElasticFilterDto;
import APP_PACKAGE.dto.request.DocElasticPaginationDto;
import APP_PACKAGE.model.entity.Document;

@Component
@RequiredArgsConstructor
public class DocumentDao {
    private final ElasticsearchRestTemplate esTemplate;

    @NotNull
    public AggregatedPage search(@NotNull DocElasticFilterDto filter, @NotNull DocElasticPaginationDto pagination) {
        SearchQuery query = DocumentQueryBuilderKt.buildSearchQuery(filter, pagination);
        return esTemplate.queryForPage(query, Document.class);
    }
}
ElasticsearchRestTemplate发送到elastic此http请求:

curl -iX POST 'http://HOST:9200/INDEX/_doc/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=dfs_query_then_fetch&batched_reduce_size=512' -d '{"from":0,"size":1,"query":{"bool":{"filter":[{"terms":{"pgs":[2],"boost":1.0}},{"terms":{"t":[2],"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}},"version":true,"sort":[{"t":{"order":"desc"}}]}'
我希望使用以下参数发送请求(计算每个搜索,如
from
+
size
(pagination DTO中的参数))参数:

curl -iX POST 'http://HOST:9200/INDEX/_doc/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=dfs_query_then_fetch&batched_reduce_size=512&terminate_after=1' -d '{"from":0,"size":1,"query":{"bool":{"filter":[{"terms":{"pgs":[2],"boost":1.0}},{"terms":{"t":[2],"boost":1.0}}],"adjust_pure_negative":true,"boost":1.0}},"version":true,"sort":[{"t":{"order":"desc"}}]}'
如何使用spring data elasticsearch实现这一点


我找到了可能的解决方案——在没有spring数据库的情况下使用RestHighLevelClient

    fun search(filter: DocElasticFilterDto, pagination: DocElasticPaginationDto): DocElasticSearchResult<DocElasticDto> {
        val query = buildSearchQuery(filter)
        log.debug("#search: query: $query")
        val searchSourceBuilder = buildSourceBuilder(query)
        searchSourceBuilder.size(pagination.limit)
        val from = pagination.page * pagination.limit
        searchSourceBuilder.from(from)
        searchSourceBuilder.terminateAfter(from + pagination.limit)

        val response = esClient.search(buildRequest(searchSourceBuilder), RequestOptions.DEFAULT)

        return DocElasticSearchResult(getResults(response), response.hits.totalHits!!.value)
    }

    private fun buildRequest(searchSourceBuilder: SearchSourceBuilder) :SearchRequest {
        val searchRequest = SearchRequest(indexName)
        searchRequest.source(searchSourceBuilder)
        return searchRequest
    }

    private fun buildSourceBuilder(queryBuilder: QueryBuilder) :SearchSourceBuilder {
        val searchSourceBuilder = SearchSourceBuilder()
        searchSourceBuilder.query(queryBuilder)
        searchSourceBuilder.timeout(TimeValue.parseTimeValue(readTimeout, "timeout"))
        return searchSourceBuilder
    }
fun搜索(过滤器:docelasticfilterdo,分页:docelasticpaginationdo):DocElasticSearchResult{
val query=buildSearchQuery(过滤器)
log.debug(“#搜索:查询:$query”)
val searchSourceBuilder=buildSourceBuilder(查询)
searchSourceBuilder.size(分页.limit)
val from=pagination.page*pagination.limit
searchSourceBuilder.from(from)
searchSourceBuilder.terminateAfter(from+pagination.limit)
val response=esClient.search(buildRequest(searchSourceBuilder),RequestOptions.DEFAULT)
返回DocElasticSearchResult(getResults(response),response.hits.totalHits!!.value)
}
private fun buildRequest(searchSourceBuilder:searchSourceBuilder):SearchRequest{
val searchRequest=searchRequest(indexName)
searchRequest.source(searchSourceBuilder)
返回搜索请求
}
private fun buildSourceBuilder(queryBuilder:queryBuilder):SearchSourceBuilder{
val searchSourceBuilder=searchSourceBuilder()
searchSourceBuilder.query(queryBuilder)
searchSourceBuilder.timeout(TimeValue.parseTimeValue(readTimeout,“timeout”))
返回searchSourceBuilder
}

Spring Data Elasticsearch当前不支持
terminate\u after
参数