ElasticsearchStatusException包含无法识别的参数:[ccs_minimize_roundtrips]]

时间:2019-04-09 22:50:59

标签: elasticsearch

我正在尝试在ElasticSearch服务器上进行简单搜索,并在出现错误后得到提示

ElasticsearchStatusException [Elasticsearch异常[type = illegal_argument_exception,原因=请求[/ recordlist1 / _search]包含无法识别的参数:[ccs_minimize_roundtrips]]]

查询字符串: {“ query”:{“ match_all”:{“ boost”:1.0}}}

我正在使用: elasticsearch-rest-high-level-client(Maven构件)

SearchRequest searchRequest =新的SearchRequest(INDEX);

    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
    searchRequest.source(searchSourceBuilder);

    try 
    {


        System.out.print(searchRequest.source());
        SearchResponse response = getConnection().search(searchRequest,RequestOptions.DEFAULT);
        SearchHit[]  results=response.getHits().getHits();
        for(SearchHit hit : results)
        {
            String sourceAsString = hit.getSourceAsString();
            System.out.println( gson.fromJson(sourceAsString, Record.class).year);
        }

    } 
    catch(ElasticsearchException e) 
    {
        e.getDetailedMessage();
        e.printStackTrace();
    } 
    catch (java.io.IOException ex)
    {
        ex.getLocalizedMessage();
        ex.printStackTrace();
    }

4 个答案:

答案 0 :(得分:2)

通常是在从弹性搜索版本6.X.X移植到7.X.X时发生的。

您应将弹性搜索版本降低为6.7.1,然后尝试运行它。

由于您正在使用Maven,因此应确保您的依赖项如下:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.7.1</version>
</dependency>

答案 1 :(得分:0)

当我错误地使用7.2 API时,我的6.5群集仍在运行时,我遇到了同样的问题。一旦启动了7.2群集,该异常就会消失。

答案 2 :(得分:0)

也许您可以从异常的stackTrace中找到它:

Suppressed: org.elasticsearch.client.ResponseException: method [POST], host [http://127.0.0.1:9200], URI [/recordlist1/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=true&ignore_throttled=false&search_type=query_then_fetch&batched_reduce_size=512], status line [HTTP/1.1 400 Bad Request]

{“错误”:{“ root_cause”:[{“类型”:“ illegal_argument_exception”,“原因”:“请求[/ _search]包含无法识别的参数:[ignore_throttled],[rest_total_hits_as_int]”}],“类型“:” illegal_argument_exception“,”原因“:”请求[/ _search]包含无法识别的参数:[ignore_throttled],[rest_total_hits_as_int]“},” status“:400}

因此,您可以通过curl尝试使用此GET方法,这会出现相同的错误消息。

curl -XGET http://127.0.0.1:9200/recordlist1/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open%2Cclosed&allow_no_indices=true&ignore_throttled=false&search_type=query_then_fetch&batched_reduce_size=512

我尝试删除'rest_total_hits_as_int = true'...案例已结清。

您应通过elasticsearch -V检查es服务器的版本,并在maven中检查客户端的版本。

在高级客户端中,默认情况下,他们添加rest_total_hits_as_int = true,但我无权将其设置为false。

您可以参考

org.elasticsearch.client.RequestConverters#addSearchRequestParams Line:395 <v6.8.10> 

除了将客户端与服务器匹配之外,我别无选择。

为什么如此令人兴奋? 恩……毕竟是“高级”。

答案 3 :(得分:0)

这里的问题是版本的变化,可能您使用的是弹性搜索6.x.x,现在使用的是7.x.x

您绝对可以通过使用7.x.x的弹性搜索服务器来解决此问题。

private static Timestamp parseTsString(String createdDate) {
    DateTimeFormatter fmt = new DateTimeFormatterBuilder()
            .appendPattern("uuuu-M-d H:mm:ss")
            .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true)
            .toFormatter();
    return Timestamp.valueOf(LocalDateTime.parse(createdDate, fmt));
}