我可以使用弹性搜索查询构建器的toString方法

时间:2018-07-17 12:25:02

标签: java elasticsearch

我可以使用弹性搜索查询构建器的toString方法,因为它返回可使用邮递员/木假名运行的DSL查询。

内部工作:

一旦包含所有子句的所有querybuilder形成,即使以DSL形式的复杂查询也以可运行形式返回。因此,我可以直接使用DSL吗? 我调查了弹性搜索Strings.class的内部,它具有toString方法。每个构建器类都实现具有toXContent(XContentBuilder builder, Params params)方法的ToXContent接口。 XContentBuilder调用doXContent,后者调用相应查询构建器的XContent,例如BoolQueryBuilder。当RestHighLevelClient像Strings类一样调用SearchSourceBuilder时,也会调用QueryBuilder的doXContent方法。简而言之,两者都使用toXContent()方法。如果使用RestHighLevelClient,则由Request.createEntity()创建一个HttpEntity,它是查询的toString版本的字节形式,并由ES服务器执行。 因此es服务器还执行dsl版本。

doc在此也提到: 请注意,您可以使用QueryBuilder对象上的toString()方法轻松打印(aka调试)JSON生成的查询。

0 个答案:

没有答案