Arm*_*gya 20 java dsl json elasticsearch
我在Spring Web项目中使用ElasticSearch作为搜索服务,使用Transport Client与ES进行通信.
我想知道是否存在可以从JSON DSL构造QueryBuilder的方法.例如,将此bool查询DSL JSON转换为QueryBuilder.
{
"query" : {
"bool" : {
"must" : { "match" : {"content" : "quick"},
"should": { "match": {"content" : "lazy"}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要这种方法,因为我必须从Web前端接收用户的bool字符串输入,并将此bool字符串解析为QueryBuilder.但它不适合使用QueryBuilders.boolQuery().must(matchQB).should(shouldQB).must_not(mustNotQB)
.因为我们可能需要几个必须或非必须查询.
如果存在一个方法可以从JSON DSL构造一个QueryBuilder,或者存在替代解决方案,那么它将更加容易.
PS:我发现了两种方法可以将DSL String包装到QueryBuilder进行ES搜索.一个是WrapperQueryBuilder,请参阅此处的详细信息.http://javadoc.kyubu.de/elasticsearch/HEAD/org/elasticsearch/index/query/WrapperQueryBuilder.html 另一个是QueryBuilders.wrapperQuery(String DSL).
bra*_*ido 26
您可以使用 QueryBuilders.wrapperQuery(jsonQueryString);
hal*_*elf 11
您可以使用setQuery
,它可以接收json格式的字符串.
/**
* Constructs a new search source builder with a raw search query.
*/
public SearchRequestBuilder setQuery(String query) {
sourceBuilder().query(query);
return this;
}
Run Code Online (Sandbox Code Playgroud)
请注意:只需要部分DSL,{"query": }
省略部分,如下所示:
SearchResponse searchResponse = client.prepareSearch(indices).setQuery("{\"term\": {\"id\": 1}}").execute().actionGet();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17463 次 |
最近记录: |