我确实请求使用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
}
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)。我的所有其他响应都是对象数组。[{},{}]但在此呼叫中,我收到了以下信息 但我还是无法解析响应。