Выполнить необработанный JSON-запрос, используя NEST / Elasticsearch.Net - PullRequest
0 голосов
/ 11 октября 2018

Некоторые (расширенные) запросы легче писать в чистом JSON, чем с использованием синтаксиса, предоставляемого NEST.В интерфейсе IElasticLowLevelClient есть CreatePostAsync, но он использует API Index.

Я не хочу использовать HttpClient напрямую, потому что тогда мне не хватает таких функций, как максимальное количество попыток и т. д.

Можно ли выполнить любой запрос к Elasticsearch (GET, POST и т. д.) с помощью клиента NEST / Elasticsearch.Net?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Если вы хотите сделать любой запрос, вы можете использовать DoRequest/DoRequestAsync на клиенте низкого уровня

var lowLevelClient = new ElasticLowLevelClient();

var stringResponse = lowLevelClient.DoRequest<StringResponse>(
    HttpMethod.POST, 
    "_search", 
    PostData.Serializable(new
    {
        query = new { match_all = new { } }
    }));  

Также отображается на клиенте высокого уровня, NEST, в .LowLevel собственность

var client = new ElasticClient();

var stringResponse = client.LowLevel.DoRequest<StringResponse>(
    HttpMethod.POST, 
    "_search", 
    PostData.Serializable(new
    {
        query = new { match_all = new { } }
    }));
0 голосов
/ 12 октября 2018

Если вы используете NEST, вы можете использовать запрос Raw.https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/raw-query-usage.html

Позволяет передавать запрос, представленный в виде строки JSON, в синтаксис NEST Fluent API или Object Initializer.Это может быть полезно при переносе запроса, выраженного в DSL запроса, на NEST.

Вы должны иметь возможность сделать что-то вроде:

query.Raw(yourJsonQueryString)

EDIT: Если вы хотите сделать _reindex, вы можете использовать API переиндексации.

var reindexResponse = client.ReindexOnServer(r => r
    .Source(s => s
        .Index("old-index")
    )
    .Destination(d => d
        .Index("new-index")
    )
    .WaitForCompletion(true)
);
...