Можно ли использовать ElasticSearch.Net или Nest для динамического ответа - PullRequest
0 голосов
/ 26 ноября 2018

Есть ли client.Read(...) без генериков?Я не нашел ни одного, ни в Nest, ни в ElasticSearch.Net .


В версии 1.5 есть IDocument, которая может решить мою проблему, но я не могу использоватьэта версия с Elasticsearch5.5.

Все примеры, версии 5 и 6, ElasticSearch.Net и Nest требуют, чтобы я знал формат ответа как общий во время компиляции.Например, Read<Customer> (...)

Моя проблема в том, что мы не знаем формат базы данных, и мы не знаем формат вывода;но все это должно быть настраиваемым.

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

(Мне странно отвечать на мой вопрос, но я хочу показать полученный код для дальнейшего использования.)

var settings = new ConnectionSettings(new Uri(@"http://localnhost:9200"))
    .DefaultIndex("myindex");
var client = new ElasticClient(settings);

var res = client.Search<dynamic>(s => s
    .AllTypes());

var rows = res.Documents;
Assert.IsTrue(rows.Count >= 1);

dynamic row = res.Documents.First();
Assert.AreEqual("50.7031526", row.POSITION.lat.ToString()); // It is case sensitive.
Assert.AreEqual(50.7031526, (double)row.POSITION.lat); // Convert to type explicitly.
0 голосов
/ 27 ноября 2018

Вы можете использовать dynamic в качестве универсального типа, если ответ действительно динамический.

В 5.x это будет тип Json.NET JObject под обложками (так что вы можете использовать JObject вместо этого, если хотите).

В 6.x также будет работать dynamic, но фактическим типом будет внутренний JObject тип.Если вы предпочитаете работать с типом Json.NET JObject, вы можете подключить Json.NET в качестве сериализатора , используя пакет nuget NEST.JsonNetSerializer , чтобы использовать его в качестве сериализатора.для ваших документов, а затем используйте его тип JObject согласно 5.x.

...