El cliente de Elasticsearch para Java ha dejado de admitir valores de tipo de consulta personalizados, como enum.
Parece que hay una regresión/cambio en el cliente de Elasticsearch para Java, dejó de admitir valores de tipo de consulta personalizados, como enum:
String query = QueryBuilders.boolQuery().
must(QueryBuilders.termsQuery("status",
List.of(MyEnumStatus.ACTIVE, MyEnumStatus.UNDER_TEST))).toString();
El ejemplo anterior produjo una cadena de consulta JSON con el cliente de Java 6.8.14, pero genera la siguiente excepción con la versión 7.15.2, ¿alguna solución alternativa?
java.lang.IllegalArgumentException: no se puede escribir el tipo [class ...$MyEnumStatus]
at org.elasticsearch.common.io.stream.StreamOutput.writeGenericValue(StreamOutput.java:845)
at org.elasticsearch.common.io.stream.StreamOutput.lambda$static$12(StreamOutput.java:699)
at org.elasticsearch.common.io.stream.StreamOutput.writeGenericValue(StreamOutput.java:843)
at org.elasticsearch.index.query.TermsQueryBuilder$Values.serialize(TermsQueryBuilder.java:435)
at org.elasticsearch.index.query.TermsQueryBuilder$BinaryValues.<init>(TermsQueryBuilder.java:495)
at org.elasticsearch.index.query.TermsQueryBuilder$BinaryValues.<init>(TermsQueryBuilder.java:485)
at org.elasticsearch.index.query.TermsQueryBuilder.<init>(TermsQueryBuilder.java:161)
at org.elasticsearch.index.query.QueryBuilders.termsQuery(QueryBuilders.java:590)
davy.ai
Parece que con el cliente de Elasticsearch en java 7.15.2, los valores personalizados de los enums no son compatibles en TermsQueryBuilder. Sin embargo, hay algunas soluciones disponibles para superar esta limitación:
Estos son solo un par de ejemplos de cómo solucionar el problema/cambio en el cliente de Elasticsearch en java. Sin embargo, dependiendo de tu caso de uso, puede haber otras soluciones viables.