spring data es 通过原生dsl 语句查询

想要在代码里使用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
有人也遇到了同样的问题。

image.png

image.png

原来需要这样写

String query = "{"match_all":{}}";

因为QueryBuilders 本身就会包装上 query。

参考地址
https://discuss.elastic.co/t/parsingexception-in-elastic-5-0-0/64626

https://stackoverflow.com/questions/20167976/elasticsearch-no-query-registered-for-query/56051064#56051064

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。