elasticsearch,elasticsearch-high-level-restclient,Java,elasticsearch,Elasticsearch High Level Restclient" /> elasticsearch,elasticsearch-high-level-restclient,Java,elasticsearch,Elasticsearch High Level Restclient" />

Java Rest高级客户端:请求超时不起作用

Java Rest高级客户端:请求超时不起作用,java,elasticsearch,elasticsearch-high-level-restclient,Java,elasticsearch,Elasticsearch High Level Restclient,我们试图在查询中使用请求超时,但它似乎对我们不起作用 以下是我们在安装过程中所做的工作: search.default_allow_partial_结果:false(也在服务器端) (作为客户端) 在我们命中的每个搜索查询中设置10毫秒的超时。(客户) (侧面) 除此之外,我们还设置了全局超时,如代码所示 下: 查询耗时超过8秒,但仍未超时。我们已经禁用了部分结果,希望得到一个超时错误,但我们也没有得到任何错误 此外,即使查询花费的时间超过了指定的超时时间,isTimedOut标志始终返回为

我们试图在查询中使用请求超时,但它似乎对我们不起作用

以下是我们在安装过程中所做的工作:

  • search.default_allow_partial_结果:false(也在服务器端) (作为客户端)
  • 在我们命中的每个搜索查询中设置10毫秒的超时。(客户) (侧面)
  • 除此之外,我们还设置了全局超时,如代码所示 下:
查询耗时超过8秒,但仍未超时。我们已经禁用了部分结果,希望得到一个超时错误,但我们也没有得到任何错误

此外,即使查询花费的时间超过了指定的超时时间,isTimedOut标志始终返回为false

以下是我正在查询的请求示例:

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    QueryBuilder infraQueryBuilder = QueryBuilders.termQuery("field1", field1);
    QueryBuilder totalCountRangeQueryBuilder = QueryBuilders.rangeQuery("field2").gte(3);

    BoolQueryBuilder innerBoolQueryBuilder = QueryBuilders.boolQuery();
    innerBoolQueryBuilder.must(QueryBuilders.rangeQuery("nestedDocType1.field1").gt(2));

    QueryBuilder filter = QueryBuilders
        .nestedQuery("nestedDocType1", innerBoolQueryBuilder, ScoreMode.Max)
        .innerHit(new InnerHitBuilder()
            .setFetchSourceContext(
                new FetchSourceContext(true, new String[]{"nestedDocType1.field1"}, null))
            .addSort(SortBuilders.fieldSort("nestedDocType1.field1").order(SortOrder.DESC))
            .setSize(1)
        );

    boolQueryBuilder.must(infraQueryBuilder);
    boolQueryBuilder.must(totalCountRangeQueryBuilder);

    if (inputRevisions != null && (inputRevisions.size() > 0)) {
      QueryBuilder allEligibleRevisionsFilter = QueryBuilders
          .termsQuery("field3", inputRevisions);
      boolQueryBuilder.must(allEligibleRevisionsFilter);
    }

    boolQueryBuilder.filter(filter);

    sourceBuilder.query(boolQueryBuilder)
        .fetchSource(new String[]{
            "field3",
            "field2"
        }, null);

    sourceBuilder.size(batchSize);
    sourceBuilder.timeout(TimeValue.timeValueMillis(10));

    SearchRequest searchRequest = createSearchRequest(sourceBuilder, enterpriseId);
    searchRequest.allowPartialSearchResults(false);

    SearchResponse searchResponse = getSearchResponse(searchRequest);

    ESCustomScroll<Set<String>> esCustomScroll = this::populateProcessedRevisionsSetWithESScroll;
    getESDataByScroll(esCustomScroll, searchResponse, processedRevisions);  // gets the data by scrolling over again and again until data is available.
SearchSourceBuilder sourceBuilder=newsearchsourcebuilder();
BoolQueryBuilder BoolQueryBuilder=QueryBuilders.boolQuery();
QueryBuilder infraQueryBuilder=QueryBuilders.termQuery(“field1”,field1);
QueryBuilder totalCountRangeQueryBuilder=QueryBuilders.rangeQuery(“field2”).gte(3);
BoolQueryBuilder innerBoolQueryBuilder=QueryBuilders.boolQuery();
innerBoolQueryBuilder.must(QueryBuilders.rangeQuery(“nestedDocType1.field1”).gt(2));
QueryBuilder过滤器=QueryBuilders
.nestedQuery(“nestedDocType1”,innerBoolQueryBuilder,ScoreMode.Max)
.innerHit(新的InnerHitBuilder()
.setFetchSourceContext(
新FetchSourceContext(true,新字符串[]{“nestedDocType1.field1”},null))
.addSort(SortBuilders.fieldSort(“nestedDocType1.field1”).order(SortOrder.DESC))
.setSize(1)
);
boolQueryBuilder.must(infraQueryBuilder);
boolQueryBuilder.must(totalCountRangeQueryBuilder);
if(inputRevisions!=null&(inputRevisions.size()>0)){
QueryBuilder allEligibleRevisionsFilter=QueryBuilders
.termsQuery(“字段3”,输入设备);
boolQueryBuilder.must(allEligibleRevisionsFilter);
}
boolQueryBuilder.filter(filter);
查询(boolQueryBuilder)
.fetchSource(新字符串[]){
“第三场”,
“字段2”
},空);
sourceBuilder.size(batchSize);
sourceBuilder.timeout(TimeValue.timeValueMillis(10));
SearchRequest SearchRequest=createSearchRequest(sourceBuilder,enterpriseId);
searchRequest.allowPartialSearchResults(false);
SearchResponse SearchResponse=getSearchResponse(searchRequest);
ESCustomScroll ESCustomScroll=this::PopulateProcessedRevisionSSetwisScroll;
getESDataByScroll(esCustomScroll、searchResponse、processedRevisions);//通过反复滚动获取数据,直到数据可用。
下面是我们用于滚动的代码:

private boolean populateProcessedRevisionsSetWithESScroll(SearchResponse searchResponse, Set<String> processedRevisions) {
            if(searchResponse == null ||
                searchResponse.getHits() == null ||
                searchResponse.getHits().getHits() == null ||
                searchResponse.getHits().getHits().length == 0) {
              return false;
            }

            for(SearchHit outerHit : searchResponse.getHits().getHits()) {
              Map<String, Object> outerSourceMap = outerHit.getSourceAsMap();

              String revision = (String) outerSourceMap.get("field4");
              int totalCount = (Integer) outerSourceMap.get("field3");

              SearchHit[] innerHits = outerHit.getInnerHits().get("nestedDocType1").getHits();

              if(innerHits == null || innerHits.length == 0) {
                logger.error("No inner hits found for revision: "+revision);
                continue;
              }

              Map<String, Object> innerSourceMap = innerHits[0].getSourceAsMap();
              int simCount = (Integer) innerSourceMap.get("field1");

              if(((totalCount - simCount) == 0) || (simCount > ((totalCount - simCount) / 2))) {
                processedRevisions.add(revision);
              }
            }

            return true;
          }
private boolean populateProcessedRevisionssetwithScroll(SearchResponse SearchResponse,Set processedRevisions){
if(searchResponse==null||
searchResponse.getHits()==null||
searchResponse.getHits().getHits()==null||
searchResponse.getHits().getHits().length==0){
返回false;
}
for(SearchHit outerHit:searchResponse.getHits().getHits()){
映射outerSourceMap=outerHit.getSourceAsMap();
字符串修订=(字符串)outerSourceMap.get(“field4”);
int totalCount=(整数)outerSourceMap.get(“field3”);
SearchHit[]innerHits=outerHit.getInnerHits().get(“nestedDocType1”).getHits();
if(innerHits==null | | innerHits.length==0){
logger.错误(“没有找到修订版的内部点击:“+修订版”);
继续;
}
Map innerSourceMap=innerHits[0]。getSourceAsMap();
int simCount=(整数)innerSourceMap.get(“field1”);
如果(((totalCount-simCount)==0)| |(simCount>((totalCount-simCount)/2))){
processedRevisions.add(修订版);
}
}
返回true;
}
即使在部分结果的情况下,我们也希望设置isTimedOut标志。但事实并非如此

你能告诉我们哪里错了,或者我们错过了什么吗


相关问题:

尝试为
RestClientBuilder
设置
setMaxRetryTimeoutMillis
——它将创建一个侦听器,并在
setMaxRetryTimeoutMillis
过期后将其切断

private boolean populateProcessedRevisionsSetWithESScroll(SearchResponse searchResponse, Set<String> processedRevisions) {
            if(searchResponse == null ||
                searchResponse.getHits() == null ||
                searchResponse.getHits().getHits() == null ||
                searchResponse.getHits().getHits().length == 0) {
              return false;
            }

            for(SearchHit outerHit : searchResponse.getHits().getHits()) {
              Map<String, Object> outerSourceMap = outerHit.getSourceAsMap();

              String revision = (String) outerSourceMap.get("field4");
              int totalCount = (Integer) outerSourceMap.get("field3");

              SearchHit[] innerHits = outerHit.getInnerHits().get("nestedDocType1").getHits();

              if(innerHits == null || innerHits.length == 0) {
                logger.error("No inner hits found for revision: "+revision);
                continue;
              }

              Map<String, Object> innerSourceMap = innerHits[0].getSourceAsMap();
              int simCount = (Integer) innerSourceMap.get("field1");

              if(((totalCount - simCount) == 0) || (simCount > ((totalCount - simCount) / 2))) {
                processedRevisions.add(revision);
              }
            }

            return true;
          }