elasticsearch,kibana,Java,elasticsearch,Kibana" /> elasticsearch,kibana,Java,elasticsearch,Kibana" />

基于java查询的elasticsearch数据获取

基于java查询的elasticsearch数据获取,java,elasticsearch,kibana,Java,elasticsearch,Kibana,我使用以下代码从Elasticsearch索引中获取数据: SearchRequest request = new SearchRequest("football_sum_csv").scroll(new TimeValue(60000)); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // searchSourceBuilder.query(matchQuery("multi", "test")

我使用以下代码从Elasticsearch索引中获取数据:

SearchRequest request = new SearchRequest("football_sum_csv").scroll(new TimeValue(60000));
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//    searchSourceBuilder.query(matchQuery("multi", "test"));
searchSourceBuilder.size(10000);
searchSourceBuilder.sort(FieldSortBuilder.DOC_FIELD_NAME, SortOrder.ASC);
request.source(searchSourceBuilder);
SearchResponse scrollResp = client.search(request, RequestOptions.DEFAULT);
System.out.println(scrollResp);
这将返回我的
ElasticSearch
索引中的所有数据
在这里,我想根据我的
查询
过滤
一些数据。在我的例子中,我想手动输入query并从
ElasticSearch
获取结果

例如:
下面的查询将返回如上所示的所有数据

query = {'query': {'bool': {'must': [{'match_all': {}}], 'must_not': [], 'should': []}} }
下面的查询将返回名为西班牙的
国家中的所有数据

query = {"query": {"bool": {"must": [{"match_phrase": {"countryName": "Spain"}}], "must_not": [], "should": []}}}
下面的查询将返回
1000
5000
之间名为
Windows的
os
sessionTime
中的所有数据

{"query": {"bool": {"must": [{"range": {"sessionTime": {"gte": 1000, "lt": 5000}}}, {"match_phrase": {"os": "Windows"}}], "must_not": [], "should": []}}}
在上述三个查询中,它们在
ElasticSearch
中执行不同的操作。我想使用类似这样的查询来获取数据

如果我把查询放在上面的
java
code中

searchSourceBuilder.query({"query": {"bool": {"must": [{"match_phrase": {"countryName": "Spain"}}], "must_not": [], "should": []}}});
这给了我一个错误。
我知道
Querybuilders
有很多查询选项,比如范围、匹配等等。但是我想手动输入上面列出的查询,并从
ElasticSearch
获取数据。我不知道怎么做。请帮助我找到一些解决方案。

从alexgids的评论中找到了答案:
wrapperQuery
需要作为
json

String query = "{"bool": {"must": [{"match_phrase": {"countryName": "Spain"}}], "must_not": [], "should": []}}";
QueryBuilder qb = QueryBuilders.wrapperQuery(query);
SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
searchSourceBuilder1.query(qb);
SearchRequest searchRequest = new SearchRequest("index_name");
searchRequest.source(searchSourceBuilder1);
SearchResponse scrollResp1 = client.search(searchRequest, RequestOptions.DEFAULT);
System.out.println(scrollResp1);

如果这不是输入错误,我相信您的查询应该是字符串?类似这样的内容:
searchSourceBuilder.query(“{\'query\':{\'bool\':{\'must\':[{\'match\'phrase\':{\'countryName\':\'Spania\'}],\“must\'not\':[],\“should\':[]}”)是的…它是一个字符串…我如何制作它。你能检查这个@alexgids吗,非常感谢你..包装查询帮助了我。。。。。