如何通过ElasticsearchRestTemplate在参数后使用terminate_向elastic发送搜索请求?
我确实请求使用ElasticsearchRestTemplate为文档实体创建ElasticCluster。我的刀类:如何通过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
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
参数