基于java查询的elasticsearch数据获取
我使用以下代码从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")
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吗,非常感谢你..包装查询帮助了我。。。。。