Получение данных изasticsearch на основе запроса с использованием java - PullRequest
0 голосов
/ 13 февраля 2020

Я получил данные из индекса 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. В моем случае я хочу вручную ввести запрос и получить результаты от 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 Ответ

0 голосов
/ 14 февраля 2020

Нашел ответ по комментарию 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...