我正在尝试在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();
}
答案 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));
}