elastic/elasticsearch-java

use elasticsearch java client query api with docvalueFields and storedField, and response is error!!

Mrruigege opened this issue · 6 comments

Elasticsearch Version

8.0.0

Installed Plugins

No response

Java Version

8.9.1

OS Version

ubuntu

Problem Description

i want to use es query with docvalue_fields and stored_fields. in kibana,it's ok. but when i use use elasticsearch java client to query, it response error! the error is:

java.lang.NullPointerException
at org.eclipse.parsson.JsonGeneratorImpl.writeEscapedString(JsonGeneratorImpl.java:539)
at org.eclipse.parsson.JsonGeneratorImpl.write(JsonGeneratorImpl.java:359)
at co.elastic.clients.elasticsearch.core.search.Hit.serializeInternal(Hit.java:303)
at co.elastic.clients.elasticsearch.core.search.Hit.serialize(Hit.java:293)
at co.elastic.clients.elasticsearch.core.search.HitsMetadata.serializeInternal(HitsMetadata.java:130)
at co.elastic.clients.elasticsearch.core.search.HitsMetadata.serialize(HitsMetadata.java:115)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.serializeInternal(ResponseBody.java:248)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.serialize(ResponseBody.java:232)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:408)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:345)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.toString(ResponseBody.java:311)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.io.PrintStream.println(PrintStream.java:897)
at com.example.demoproject.ElasticsearchTest.test(ElasticsearchTest.java:53)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
Suppressed: jakarta.json.stream.JsonGenerationException: Generating incomplete JSON
at org.eclipse.parsson.JsonGeneratorImpl.close(JsonGeneratorImpl.java:519)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:407)
... 74 more

Steps to Reproduce

1、create index and add data

PUT device_info
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 2
}
, "mappings": {
"properties": {
"city": {
"type": "keyword"
}
}
}
}

PUT device_info/_bulk
{"index": {"_id": "1"}}
{"city": "chengdu"}
{"index": {"_id": "2"}}
{"city": "chengdu"}

2、use kibana query (return no error)

GET device_info/_search
{
"stored_fields": ["none"],
"docvalue_fields": ["city"],
"query": {
"term": {
"city": {
"value": "chengdu"
}
}
}
}

3、use elasticsearch java client to query

@test
public void test() throws IOException {
ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(true);
SearchResponse response = elasticsearchClient.search(s -> s
.index("device_info")
.query(q -> q
.term(t -> t
.field("city")
.value("chengdu")))
.docvalueFields(d -> d
.field("city"))
.storedFields("none"), Void.class);
System.out.println(response);
ApiTypeHelper.DANGEROUS_disableRequiredPropertiesCheck(false);
}

error info :
java.lang.NullPointerException
at org.eclipse.parsson.JsonGeneratorImpl.writeEscapedString(JsonGeneratorImpl.java:539)
at org.eclipse.parsson.JsonGeneratorImpl.write(JsonGeneratorImpl.java:359)
at co.elastic.clients.elasticsearch.core.search.Hit.serializeInternal(Hit.java:303)
at co.elastic.clients.elasticsearch.core.search.Hit.serialize(Hit.java:293)
at co.elastic.clients.elasticsearch.core.search.HitsMetadata.serializeInternal(HitsMetadata.java:130)
at co.elastic.clients.elasticsearch.core.search.HitsMetadata.serialize(HitsMetadata.java:115)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.serializeInternal(ResponseBody.java:248)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.serialize(ResponseBody.java:232)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:408)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:345)
at co.elastic.clients.elasticsearch.core.search.ResponseBody.toString(ResponseBody.java:311)
at java.base/java.lang.String.valueOf(String.java:2951)
at java.base/java.io.PrintStream.println(PrintStream.java:897)
at com.example.demoproject.ElasticsearchTest.test(ElasticsearchTest.java:53)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
Suppressed: jakarta.json.stream.JsonGenerationException: Generating incomplete JSON
at org.eclipse.parsson.JsonGeneratorImpl.close(JsonGeneratorImpl.java:519)
at co.elastic.clients.json.JsonpUtils.toString(JsonpUtils.java:407)
... 74 more

Logs (if relevant)

No response

Hit.class i think the '_id' should null judgment

@swallez should these issues be moved to the https://github.com/elastic/elasticsearch-java repo?

Pinging @elastic/clients-team (Team:Clients)

@mark-vieira yes, definitely. Feel free to move issues about co.elastic.clients without asking 😉

Also see #680

fixed in the code generator, will be part of the next release!