想要在代码里使用es 的 query dsl 语句。
因为写好了 query dsl 语句,再用程序翻译 挺麻烦的。
在官网找到了 wrapper query 刚好可以满足,将 json 串作为 query 的参数。
https://www.elastic.co/guide/en/elasticsearch/reference/current/specialized-queries.html
wrapper query
A query that accepts other queries as json or yaml string.
用代码测试下
@Test
public void testtest() {
SearchRequestBuilder searchRequestBuilder;
String query = " { \"query\":{\"match_all\" : {\"boost\" : 1.0}}}";
WrapperQueryBuilder wrapperQueryBuilder = QueryBuilders.wrapperQuery(query);
searchRequestBuilder = elasticsearchTemplate.getClient().prepareSearch("test_customer");
searchRequestBuilder.setQuery(QueryBuilders.wrapperQuery(query));
SearchResponse response = searchRequestBuilder.execute().actionGet();
}
报了异常
ParsingException[no [query] registered for [query]
在官网找到了答案
https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626
有人也遇到了同样的问题。
原来需要这样写
String query = "{"match_all":{}}";
因为QueryBuilders 本身就会包装上 query。
参考地址
https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626