java - Elasticsearch:在 QueryBuilders.termsQuery() 中添加 arraylist 会抛出错误

标签 java elasticsearch collections elastic-stack elasticsearch-java-api

我试图将值列表传递给 QueryBuilders.termsQuery(),但它抛出了错误:

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]

这是我的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}

最佳答案

如堆栈跟踪所示,这是因为 Number Format Exception .您需要发送 Integer 的列表这是 id 的类型字段而不是传递 List<Replacement>如您的代码中所述。

而不是创建 List<Replacement> 的对象,创建一个列表并传递该列表。

希望它对你有用。

关于java - Elasticsearch:在 QueryBuilders.termsQuery() 中添加 arraylist 会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894590/

相关文章:

Java正则表达式精确匹配大小写

php - “profile”不是有效的参数-Elasticsearch

java - 如何在达到限制时通过删除最旧的条目来限制 map 的最大大小

java - 使用 Scanner 类扫描 int 时出错

java - 我使用泛型,但不是 This Class<T> 东西!

java - Neo4j 中具有一级关系的路径

java - Hibernate中使用List时放置List Index

java - 使用 .NET Web 服务时将 ArrayOfStrings 转换为 JAVA 中的 String[]

elasticsearch - 如何为我的应用程序设计弹性指数?

elasticsearch - _mget可以通过非ID字段进行检索吗?