es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Repositorio de Elasticsearch – Modificar el valor de @Query

Actualmente estoy trabajando con un ElasticsearchRepository y Springboot Data. Puedo escribir un método simple con una anotación Query simple:

@Query(“{\”bool\”:{\”must\”:[{\”match\”:{\”_resource\”:\”?0\”}}]}}”)
List findByResource(String resource);

Sin embargo, el índice de Activity puede tener diferentes campos múltiples (que varían de línea a línea en logstash). Así que, podría necesitar agregar múltiples cláusulas de coincidencia (match). Estaba probando agregar un segundo parámetro que contendría el resto de los parámetros (si los hubiera) de esta manera:

@Query(“{\”bool\”:{\”must\”:[{\”match\”:{\”_resource\”:\”?0\”}}?1]}}”)
List findByResource(String resource, String additionalClauses);

El segundo parámetro podría verse así:

String additional = “,{\”match\”:{\”_method\”:\”GET\”}}

Sin embargo, obtengo esta excepción al llamar al endpoint con el servicio:

Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]; nested exception is ElasticsearchStatusException[Elasticsearch exception [type=x_content_parse_exception, reason=[1:60] [bool] failed to parse field [must]]]; nested: ElasticsearchException[Elasticsearch exception [type=json_parse_exception, reason=Unexpected character (‘\’ (code 92)): was expecting double-quote to start field name\n at [Source: (ByteArrayInputStream); line: 1, column: 62]]];

Entiendo que lo que intenté hacer no es la forma ideal de usar la anotación @Query (incluso creo que no está permitido hacer lo que estoy intentando), así que:

¿Existe una forma diferente de lograr esto?
¿Es @Query la única opción que tengo? ¿Cómo podría hacerlo entonces?

Saludos cordiales.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que lo que estás intentando hacer no es compatible con la anotación @Query. Es posible que necesites explorar otras opciones, como usar la API de Java de Elasticsearch para construir y ejecutar tu consulta. Esto te permitiría construir una consulta con múltiples cláusulas de coincidencia y pasarla al repositorio de Elasticsearch.

Comments are closed.