12

我正在尝试在 ElasticSearch 服务器上进行简单搜索并收到以下错误

ElasticsearchStatusException[Elasticsearch exception [type=illegal_argument_exception, reason=request [/recordlist1/_search] contains unrecognized parameter: [ccs_minimize_roundtrips]]]

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

我正在使用:elasticsearch-rest-high-level-client(maven artifact)

SearchRequest searchRequest = new 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

4 回答 4

8

这通常发生在从弹性搜索版本移植6.X.X7.X.X.

您应该将弹性搜索版本降低到6.7.1并尝试运行它。

由于您使用的是 Maven,因此您应该确保您的依赖项应如下所示:

<dependency>
    <groupId>org.elasticsearch</groupId>
    <artifactId>elasticsearch</artifactId>
    <version>6.7.1</version>
</dependency>
于 2019-04-12T13:36:39.570 回答
2

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

于 2019-10-19T03:39:21.487 回答
2

这里的问题是版本的移动,可能您使用的是弹性搜索 6.xx,现在使用的是 7.xx

您绝对可以通过拥有 7.xx 的弹性搜索服务器来解决这个问题

Elasticsearch 6.x.x used to have type of document 
(where you could give type to your documents)


but Elasticsearch 7.x.x onwards it has no type or 
default type _doc, so you need to have _doc as your type 
while creating mapping.
于 2020-07-30T04:04:28.240 回答
1

也许你可以从 stackTrace of exception 中找到这个:

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]

{"error":{"root_cause":[{"type":"illegal_argument_exception","re​​ason":"request [/_search] 包含无法识别的参数:[ignore_throttled], [rest_total_hits_as_int]"}],"type":"非法参数异常","原因":"请求 [/_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-server 的版本和 maven 中的客户端版本。

在高级客户端中,他们默认添加 rest_total_hits_as_int=true,我发现无法将其设置为 false。

你可以参考

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

我别无选择,只能匹配客户端以匹配服务器。

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

于 2020-07-30T03:29:10.790 回答