当前位置: 首页 > 知识库问答 >
问题:

如何通过ElasticsearchRestTemplate将搜索请求发送到elastic,参数后带有terminate\u?

太叔昊穹
2023-03-14

我确实请求使用Elasticsearch chRestTemboard为Document实体进行弹性集群。我的DAO类:

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发送到此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"}}]}'

我希望发送带有terminate_after的请求(为每个搜索计算,如从大小(从分页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
    }

共有1个答案

邹誉
2023-03-14

Spring Data Elasticsearch中当前不支持terminate_after参数

 类似资料:
  • 问题内容: 似乎urllib2默认发送HTTP / 1.1请求? 问题答案: urllib2在后台使用httplib进行连接。您可以将其更改为http 1.0,如下所示。我已包含我的apache服务器访问日志,以显示http连接如何更改为1.0 码 访问日志

  • 我在通过C#API中的WebClient发送POST请求时遇到问题。该职位要求如下: 我知道如何处理像用户代理等标题。,但是我对边界有一个问题。我不知道怎么把它们放在哪里...

  • 问题内容: 我想使用jQuery将JavaScript数组发送到servlet 。 当我使用 它返回空值。 如何访问这些值? 问题答案: 将数组作为JS对象的值发送,因此最终得到。 在servlet中,您需要在请求参数名称后加上。 jQuery附加了它们以便对弱类型语言(如PHP)友好。

  • 我有下面的代码(谷歌的凌空库)向我的php服务器发送POST请求并获取信息。我没有在php中检查isset($\u POST['id')就尝试了代码,代码运行良好。当我开始检查时,php将跳过if语句并转到else,这意味着代码没有正确发送参数。我怎样才能解决这个问题? 我还尝试了以下代码: 但是我仍然得到同样的结果。

  • 单击from-data或x-www-form-urlencoded 然后在键/值字段上传递两个参数。 ANDROID改装设置 原因是我使用了2个API(webapi和wcf)。我的所有其他响应都是对象数组。[{},{}]但在此呼叫中,我收到了以下信息 但我还是无法解析响应。