Skip to content

Missing required property 'Term.tokens' in Termvectors response. #184

Closed
@jerryguowei

Description

@jerryguowei

Java API client version

7.17.1

Java version

11

Elasticsearch Version

7.17.1

Problem description

I got an en exception when I run termsVector request.

Exception in thread "main" co.elastic.clients.util.MissingRequiredPropertyException: Missing required property 'Term.tokens'
	at co.elastic.clients.util.ApiTypeHelper.requireNonNull(ApiTypeHelper.java:76)
	at co.elastic.clients.util.ApiTypeHelper.unmodifiableRequired(ApiTypeHelper.java:141)
	at co.elastic.clients.elasticsearch.core.termvectors.Term.<init>(Term.java:72)
	at co.elastic.clients.elasticsearch.core.termvectors.Term.<init>(Term.java:51)
	at co.elastic.clients.elasticsearch.core.termvectors.Term$Builder.build(Term.java:251)
	at co.elastic.clients.elasticsearch.core.termvectors.Term$Builder.build(Term.java:167)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:80)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
	at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:346)
	at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:332)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:72)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:176)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:137)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
	at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:346)
	at co.elastic.clients.json.JsonpDeserializerBase$StringMapDeserializer.deserialize(JsonpDeserializerBase.java:332)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectDeserializer$FieldObjectDeserializer.deserialize(ObjectDeserializer.java:72)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:176)
	at co.elastic.clients.json.ObjectDeserializer.deserialize(ObjectDeserializer.java:137)
	at co.elastic.clients.json.JsonpDeserializer.deserialize(JsonpDeserializer.java:75)
	at co.elastic.clients.json.ObjectBuilderDeserializer.deserialize(ObjectBuilderDeserializer.java:79)
	at co.elastic.clients.json.DelegatingDeserializer$SameType.deserialize(DelegatingDeserializer.java:43)
	at co.elastic.clients.transport.rest_client.RestClientTransport.decodeResponse(RestClientTransport.java:328)
	at co.elastic.clients.transport.rest_client.RestClientTransport.getHighLevelResponse(RestClientTransport.java:294)
	at co.elastic.clients.transport.rest_client.RestClientTransport.performRequest(RestClientTransport.java:147)
	at co.elastic.clients.elasticsearch.ElasticsearchClient.termvectors(ElasticsearchClient.java:1647)
	at co.elastic.clients.elasticsearch.ElasticsearchClient.termvectors(ElasticsearchClient.java:1665)
	at com.duduanan.TestTermvectors.main(TestTermvectors.java:33)

The token actually is not mandatory, but the client treat it as a mandatory field.

Steps to reproduce the issue:

  1. start docker:

docker run -t -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" -e \ "path.repo=/tmp" docker.elastic.co/elasticsearch/elasticsearch:7.17.1

  1. run java code.
public class TestTermvectors
{
   public static void main(String[] args) throws IOException
   {
       ElasticsearchClient client = null;
       try
       {
           client = buildClient();

           client.indices().create(c -> c.index("my-index-1")
                                         .mappings(m -> m.properties("test_field", p -> p.text(text -> text.termVector(TermVectorOption.Yes)))
                                         )
           );
           Map<String, String> doc = Map.of("test_field", "test test test test");
           client.termvectors(tv -> tv.index("my-index-1").doc(doc).payloads(false).positions(false).offsets(false));
       }
       finally
       {
           if (client != null)
           {
               client._transport().close();
           }
       }
   }

   public static ElasticsearchClient buildClient()
   {
       RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();
       ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());
       return new ElasticsearchClient(transport);
   }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Area: SpecificationRelated to the API spec used to generate client code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions