我在Spring Web项目中使用ElasticSearch作为搜索服务,它使用Transport Client与ES通信。
我想知道是否存在一种方法可以从JSON DSL构造QueryBuilder。例如,将此bool查询DSL JSON转换为QueryBuilder。
{
"query" : {
"bool" : {
"must" : { "match" : {"content" : "quick"},
"should": { "match": {"content" : "lazy"}
}
}
}
我需要这个方法,因为我必须从web前端接收用户的bool字符串输入,并将此bool字符串解析为QueryBuilder。但是它不适合使用QueryBuilders.boolQuery().must(matchQB).should(shouldQB).must_not(mustNotQB)
。因为我们可能需要几个必须或非必须查询。
如果存在一种方法可以从JSON DSL构造QueryBuilder,或者存在替代解决方案,那么它会更容易。
PS:我找到了两个方法,可以将DSL String Package 到QueryBuilder中进行ES搜索。一个是WrapperQueryBuilder,详见此处。http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/index/query/WrapperQueryBuilder.html另一个是QueryBuilders.wrapperQuery(String DSL)。
4条答案
按热度按时间siv3szwd1#
您可以使用
QueryBuilders.wrapperQuery(jsonQueryString);
mm5n2pyu2#
您可以使用
setQuery
,它可以接收json格式的字符串。注意:只需要DSL的一部分,
{"query": }
部分被省略,如下所示:huwehgph3#
可能值得研究low level rest client。有了这个你可以做:
vx6bjr1n4#
使用RestHighLevelClient(使用lowLevelClient())