Elasticsearch如何查询使用JSON字符串的DSL
背景
Java处理ES查询逻辑,有一种情况是用户从其他地方粘贴或者手动输入的JSON字符串的DSL语句;这个时候就没法使用QueryBuilder来构建所需要的SearchSource。查了查发现有个Wrapper的方式可以处理;
实现
代码贴在下面了。首先创建WrapperQueryBuilder对象,通过两种方式均可。1是直接new、2是调用静态方法wrapperQuery;其次还是创建SearchSourceBuilder,指定去query内容为wqb。再次构建SearchRequest对象即可;
String body = "{"term":{"uid":{"value":1}}}";
//Wrapper使用Json查询字符串来构建QueryBuilder;
//WrapperQueryBuilder wqb = QueryBuilders.wrapperQuery(body);
WrapperQueryBuilder wqb = new WrapperQueryBuilder(body);
SearchSourceBuilder ssb = new SearchSourceBuilder();
ssb.query(wqb);
SearchRequest request = new SearchRequest("es_index").types("doc_type");
request.source(ssb);
client.search(request, RequestOptions.DEFAULT);
注意事项
1,查询用的JSON DSL格式不包括最外面的query关键字层;否则会查询失败。
2,client可以使用RestHeighLevelClient,但是需要注意与ES服务器直接版本的关系。
3,Wrapper查询构造器的toString的内容和常规的DSL语言不一致;使用wrapper的样子如下,这样不是错误:
"wrapper" : {
"query" : "eyJxdWVyeSI6eyAgICAidGVybSI6IHsgICAgICAidWlkIjogeyAgICAgICAgInZhbHVlIjogIjE5ODIwODc0IiAgICAgIH0gICAgfX19"
}
以上是 Elasticsearch如何查询使用JSON字符串的DSL 的全部内容, 来源链接: utcz.com/z/517172.html