Elasticsearch: при добавлении массива в QueryBuilders.termsQuery() выдается ошибка
Я пытаюсь передать список значений QueryBuilders.termsQuery()
но выкидывает ошибку:
Исключено: org.elasticsearch.client.ResponseException: метод [GET], хост [ http://localhost:9200%5D, URI [/replace /_search? Typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&search_type=query_s__se_f_de_ce_set_ch [HTTP/1.1 400 Bad Request]
Это мой код Java:
Replacement linkId = null;
Replacement replacement = null;
List<Replacement> linkIDList=new ArrayList<Replacement>();
for (SearchHit hit1 : searchHits1) {
linkId = new Replacement();
Map<String, Object> sourceAsMap1 = hit1.getSourceAsMap();
linkId.setLink_id((Integer) sourceAsMap1.get("link_id"));
linkIDList.add(linkId);
}
QueryBuilder qb2 = QueryBuilders.termsQuery("id",linkIDList); // this line throws error
Что не так с этим кодом?
Пожалуйста, найдите полную трассировку стека
Suppressed: org.elasticsearch.client.ResponseException: method [GET], host [http://localhost:9200], URI [/replacement/_search?typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&search_type=query_then_fetch&batched_reduce_size=512], status line [HTTP/1.1 400 Bad Request]
{"error":{"root_cause":[{"type":"query_shard_exception","reason":"failed to create query: {\n \"terms\" : {\n \"id\" : [\n \"com.demo.searchengine.bean.Replacement@43262676\",\n \"com.demo.searchengine.bean.Replacement@1c3035bc\",\n \"com.demo.searchengine.bean.Replacement@1ae1b004\",\n \"com.demo.searchengine.bean.Replacement@5ba72360\",\n \"com.demo.searchengine.bean.Replacement@29c0bbf4\",\n \"com.demo.searchengine.bean.Replacement@3440e6a5\"\n ],\n \"boost\" : 1.0\n }\n}","index_uuid":"IivTlnL9QCmEUlisIilYUg","index":"replacement"}],"type":"search_phase_execution_exception","reason":"all shards failed","phase":"query","grouped":true,"failed_shards":[{"shard":0,"index":"replacement","node":"uPLyU7R5RXeirg8XzRqhnA","reason":{"type":"query_shard_exception","reason":"failed to create query: {\n \"terms\" : {\n \"id\" : [\n \"com.demo.searchengine.bean.Replacement@43262676\",\n \"com.demo.searchengine.bean.Replacement@1c3035bc\",\n \"com.demo.searchengine.bean.Replacement@1ae1b004\",\n \"com.demo.searchengine.bean.Replacement@5ba72360\",\n \"com.demo.searchengine.bean.Replacement@29c0bbf4\",\n \"com.demo.searchengine.bean.Replacement@3440e6a5\"\n ],\n \"boost\" : 1.0\n }\n}","index_uuid":"IivTlnL9QCmEUlisIilYUg","index":"replacement","caused_by":{"type":"number_format_exception","reason":"For input string: \"com.demo.searchengine.bean.Replacement@43262676\""}}}]},"status":400}
1 ответ
Как показано в трассировке стека, это из-за Number Format Exception
, Вам необходимо отправить список Integer
который является типом id
поле вместо прохождения List<Replacement>
как указано в вашем коде.
Вместо создания объекта List<Replacement>
создать список и передать этот список.
Надеюсь, это работает для вас.