Как написать поисковый запрос Match_all в клиентском API низкого уровня отдыха - PullRequest
0 голосов
/ 09 июля 2019

Мне нужна помощь, чтобы написать правильный поисковый запрос Match_all, чтобы он соответствовал всем параметрам моего индекса в Elasticsearch. Я использую Elasticsearch 6.3.1. и Java 8.

Я хочу перевести этот запрос в API клиента низкого уровня отдыха Java.


GET try1/_search
{
  "query": {
    "match_all": {}
  }
}

Я попробовал что-то вроде этого ниже, и это ничего не дает мне из Индекса. Теперь я знаю, где поставить свое индексное имя для поиска ниже,


SearchRequestBuilder sr = new SearchRequestBuilder(client, SearchAction.INSTANCE)
                            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
                            .setQuery(QueryBuilders.matchAllQuery());

Приведенный выше код возвращает мне это, которое не является содержимым индекса,

{ "запрос": { "match_all": { "подталкивание": 1,0}}}

Я тоже это пробовал, и не получилось,

SearchRequest searchRequest  = new SearchRequest("try1");
                    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
                    searchSourceBuilder.query(QueryBuilders.matchAllQuery());
                    searchRequest.source(searchSourceBuilder);

Результат есть,

{searchType = QUERY_THEN_FETCH, indices = [try1], indicesOptions = IndicesOptions [id = 38, ignore_unavailable = false, allow_no_indices = true, expand_wildcards_open = true, expand_wildcards_closed = false, allow_aliases_to_morepleind , types = [], routing = 'null', preference = 'null', requestCache = null, scroll = null, maxConcurrentShardRequests = 0, batchedReduceSize = 512, preFilterShardSize = 128, allowPartialSearchResults = null, source = {"query": { "match_all": { "подталкивание": 1,0}}}}

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Я решил это с помощью API RestClient в клиенте низкого уровня, как показано ниже,

´´´´
RestClient restClient = RestClient.builder(
                            new HttpHost("localhost", 9200, "http")).build();

Response response1 = restClient.performRequest("GET","/try1/_doc/1");//here is the //secret
RequestLine requestLine = response1.getRequestLine();
HttpHost host = response1.getHost();
int statusCode = response1.getStatusLine().getStatusCode();
String responseBody = EntityUtils.toString( response1.getEntity());
System.out.println("result is : " + responseBody);
´´´´

Результат равен,

´´´´
result is : {"_index":"try1","_type":"_doc","_id":"1","_version":4,"found":true,"_source":{"my_id":"6","gender":"Ahoiii"}}
´´´´
0 голосов
/ 09 июля 2019

Похоже, что вы делаете, печатаете запрос / запрос и фактически никогда не выполняете поисковый запрос. Также классы SearchRequest, SearchRequestBuilder и SearchSourceBuilder используются с клиентом высокого уровня, а не клиентом низкого уровня. Что вам нужно сделать, это запустить низкоуровневый клиентский объект rest, а затем выполнить запрос поиска с вашим экземпляром клиента. После этого вы можете прочитать ваши результаты из ответа .

Если вы хотите использовать высокоуровневый клиент, который мне самому нравится больше, я бы хотел отослать вас к этой части документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...