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

回到顶部