elastic / elasticsearch-net

This strongly-typed, client library enables working with Elasticsearch. It is the official client maintained and supported by Elastic.
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/index.html
Apache License 2.0
14 stars 1.15k forks source link

SearchResponse and ScrollResponse do not have a common base class #8353

Open braveyp opened 2 months ago

braveyp commented 2 months ago

Elastic.Clients.Elasticsearch version: 8.15.6

Elasticsearch version: 8.15.0

.NET runtime version: 4.8

Operating system version: Windows 11

Description of the problem including expected versus actual behavior:

SearchResponse and ScrollResponse do not have a common base class so the simple bulk operation of making an initial Search and then iterating through the results with subsequent Scroll requests requires extra complexity in the client application - you either have to write two near identical functions (they differ by the type of the response input) to process the responses or create two wrapper classes to give a common interface and write one handler.

flobernd commented 2 months ago

Hi @braveyp,

these responses are generated from our specification. The specification closely maps the server-side of things and there simply is no common base class.

We could potentially introduce a helper (similar to what is planned for PIT #5149) to simplify usage.

Couldn't you just simply use a (local) function to which you pass all the required properties?

public void DoSomethingWithMyDocuments<TDocument>(IEnumerable<TDocument> documents, long took)
{
    // ...
}

DoSomethingWithMyDocuments(searchResponse.Documents, searchResponse.Took);
// ...
DoSomethingWithMyDocuments(scrollResponse.Documents, scrollResponse.Took);
braveyp commented 2 months ago

I did end up doing something along those lines.