Как выполнить ElasticSearch, используя метод тела запроса REST, и получить возвращенный формат json / pretty? - PullRequest
0 голосов
/ 01 июля 2018

При выдаче запроса поиска с помощью метода тела запроса REST, например

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

есть ли параметр, который можно добавить куда угодно, чтобы запросить, чтобы формат json возвращенного тела ответа был отформатирован / довольно?

Тот же поиск с использованием REST Request URI позволяет сделать это, например

GET /bank/_search?q=*&sort=account_number:asc&pretty

Как добиться того же, используя REST request body?

Используя низкоуровневые API-интерфейсы ElasticSearch.NET, никто не может контролировать вызов REST и может предоставлять только POST json.

var esClient = new ElasticLowLevelClient(_connectionSettings);
//postDataJson is the json depicted in the question's body
var postData = PostData.String(postDataJson); 
var response = esClient.Search<StringResponse>("myIndex", postData);

Можно отправить третий параметр, объект SearchRequestParameters, я не могу найти там никакого свойства для этого.

enter image description here

1 Ответ

0 голосов
/ 01 июля 2018

Вам необходимо добавить в свой запрос pretty=true
Вот так:

GET /bank/_search?q=*&sort=account_number:asc&pretty=true

для дополнительной справки здесь

EDIT

Поначалу я вас не понял, в заголовке запроса должно быть красивое.
Попробуйте вот так:

GET /bank/_search?pretty=true
{
  "query": { "match_all": {} },
  "sort": [
    { "account_number": "asc" }
  ]
}

РЕДАКТИРОВАТЬ 2

Если вы используете elstic.NET и хотите тоже добиться симпатичного Джейсона.
Вам необходимо настроить его в соединение . Вот метод, который вы должны использовать (это в классе ConnectionConfiguration : ConnectionConfiguration<ConnectionConfiguration>):

    /// <summary>
    /// Forces all requests to have ?pretty=true querystring parameter appended,
    /// causing Elasticsearch to return formatted JSON.
    /// Also forces the client to send out formatted JSON. Defaults to <c>false</c>
    /// </summary>
    public T PrettyJson(bool b = true) => Assign(a =>
    {
        this._prettyJson = b;
        const string key = "pretty";
        if (!b && this._queryString[key] != null) this._queryString.Remove(key);
        else if (b && this._queryString[key] == null)
            this.GlobalQueryStringParameters(new NameValueCollection { { key, "true" } });
    });

Здесь вы можете увидеть git

...