searchresponse query example java json elasticsearch dsl

example - ¿Cómo construir QueryBuilder desde JSON DSL cuando se usa la API de Java en ElasticSearch?



search request elasticsearch java (2)

Estoy usando ElasticSearch como un servicio de búsqueda en el proyecto Spring Web que usa Transport Client para comunicarse con ES.

Me pregunto si existe un método que pueda construir un QueryBuilder a partir de un DSL JSON. por ejemplo, convierta esta consulta bool DSL JSON en un QueryBuilder.

{ "query" : { "bool" : { "must" : { "match" : {"content" : "quick"}, "should": { "match": {"content" : "lazy"} } } }

Necesito este método porque tengo que recibir la entrada de la cadena bool del usuario desde el frente de la web y analizar esta cadena bool a un QueryBuilder. Sin embargo, no conviene utilizar QueryBuilders.boolQuery().must(matchQB).should(shouldQB).must_not(mustNotQB) . Debido a que podemos necesitar varios deberes de consulta o no.

Si existe un método puede construir un QueryBuilder desde JSON DSL o existen soluciones alternativas, será mucho más fácil.

PS: He encontrado dos métodos que pueden envolver una cadena DSL en un QueryBuilder para la búsqueda de ES. Uno es WrapperQueryBuilder , ver detalles aquí. http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/index/query/WrapperQueryBuilder.html Otro es QueryBuilders.wrapperQuery (String DSL).


Puede usar QueryBuilders.wrapperQuery(jsonQueryString);


Puede usar setQuery , que puede recibir una cadena de formato json.

/** * Constructs a new search source builder with a raw search query. */ public SearchRequestBuilder setQuery(String query) { sourceBuilder().query(query); return this; }

Tenga en cuenta esto: solo se necesita una parte del DSL, se omite la parte {"query": } , como esto:

SearchResponse searchResponse = client.prepareSearch(indices).setQuery("{/"term/": {/"id/": 1}}").execute().actionGet();