在 ElasticSearch 中使用 Java API 时,如何从 JSON DSL 构造 QueryBuilder?
2022-09-01 22:35:30
我在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的方法,或者存在替代解决方案,那么它将容易得多。
附言:我发现了两种方法,可以将DSL字符串包装到QueryBuilder以进行ES搜索。一个是WrapplerQueryBuilder,请参阅此处的详细信息。http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/index/query/WrapperQueryBuilder.html另一个是QueryBuilders.wrapperQuery(String DSL)。