ElasticSearch NEST MultiGet с фильтрацией источников

Я пытаюсь использовать multi get для возврата коллекции строго типизированных объектов с фильтрацией источника, и хотя мне удалось создать результат, который я хочу, с помощью JSON API для ElasticSearch, я не уверен, как перевести его в NEST 1.0 API.

Это запрос, который я пытаюсь создать; он работает правильно:

GET index/thing/_mget 
{
    "docs" : [
        {
            "_id": "00000000-0000-0000-0000-000000000030",
            "_source": ["id", "name"]
        },
        {
            "_id": "00000000-0000-0000-0000-000000000321",
            "_source": ["id", "name"]
        }
        /* ....  */
    ]
}

Это то, с чем я играл, но на самом деле это не фильтрует источники; вместо этого он возвращает полный объект:

client.MultiGet(s => s
    .GetMany<Thing>(ids)
    .SourceEnabled("id", "name"))

Любая помощь будет оценена по достоинству. Кроме того, было бы предпочтительнее использовать сигнатуру для вызова SourceEnabled(), основанную на выражении (безопасный тип), если таковая существует.


person Nathan Taylor    schedule 04.08.2014    source источник


Ответы (1)


Похоже, это ошибка. Я только что открыл issue #849 на GitHub, чтобы решить эту проблему.

В то же время указание полей служит той же цели и может быть обходным путем для вас:

var result = client.MultiGet(s => s
    .GetMany<Thing>(ids, (d, i) => d.Fields("id", "name"))
);

var fieldSelection = result.GetFieldSelection<Person>(1);
var fields = fieldSelection.FieldValues<string>("name");
person Greg Marzouka    schedule 04.08.2014