我是从 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
.
在这里,我想 filter
根据我的数据 query
. 在我的例子中,我想手动输入query并从中获取结果 ElasticSearch
.
例如:
下面的查询将返回如上所示的所有数据
query = {'query': {'bool': {'must': [{'match_all': {}}], 'must_not': [], 'should': []}} }
下面的查询将返回 Country
命名 Spain
```
query = {"query": {"bool": {"must": [{"match_phrase": {"countryName": "Spain"}}], "must_not": [], "should": []}}}
下面的查询将返回 `os` 命名 `Windows` 以及 `sessionTime` 介于 `1000` 以及 `5000` ```
{"query": {"bool": {"must": [{"range": {"sessionTime": {"gte": 1000, "lt": 5000}}}, {"match_phrase": {"os": "Windows"}}], "must_not": [], "should": []}}}
在上述三个查询中,它们在中执行不同的操作 ElasticSearch
. 我想像查询一样使用它来获取数据。
如果我把查询放在上面这里 java
代码,
searchSourceBuilder.query({"query": {"bool": {"must": [{"match_phrase": {"countryName": "Spain"}}], "must_not": [], "should": []}}});
它给了我一个错误。我知道 Querybuilders
有许多查询选项,如范围、匹配等。但是我想手动输入上面列出的查询并从 ElasticSearch
. 我不知道怎么做。请帮我解决一些问题。
1条答案
按热度按时间mcvgt66p1#
从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);