Как использовать функцию MultiTermVectors в гнезде эластичного поиска

Все,

Я проиндексировал несколько XML-файлов в asticsearch, чтобы индексировать новости и вводить reuters. Я могу тогда использовать

var termvecResponse = Client.TermVectors<reuters>(t => t.Index("news").Id(1).TermStatistics().Fields(f => f.Body));

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

Client.MultiTermVectors<reuters>

я пытался

var idRange = Enumerable.Range(1, 10);

        var tvecR = Client.MultiTermVectors(new MultiTermVectorsRequest(typeof(reuters))
        {
            Documents = idRange.Select(n => new MultiTermVectorOperation<reuters>(n)
            {
                Type=typeof(reuters),
                FieldStatistics = false,
                Payloads = false,
                TermStatistics = true,
                Positions = false,
                Offsets = false
            })
        });

Он возвращает пустые векторы терминов, а объект ответа говорит, что вызов POST был /news/_mtermvectors вместо /news/reuters/_mtermvectors, есть идеи? Спасибо за помощь.

Низкоуровневое решение: используйте вызов низкого уровня, как показано ниже, если кому-то это нужно

string sbRequestBody = "{\"ids\":[\"1\", \"2\"],\"parameters\":{\"fields\": [\"body\"],\"term_statistics\":true}}";         
var termvecResponse =Client.LowLevel.Mtermvectors<MultiTermVectorsResponse>("news", "reuters", sbRequestBody);

2 ответа

Решение

Документы, которые вы предоставляете Documents Свойство по запросу с многоточечными векторами не содержит поле, предназначенное для статистики терминов, как это делает отдельный вызов. Если все документы будут нацелены на одни и те же поля, вы можете использовать

var tvecR = client.MultiTermVectors(new MultiTermVectorsRequest("news", typeof(reuters))
{
    Fields = Infer.Fields<reuters>(f => f.Body), // all docs will use these fields
    Documents = idRange.Select(n => new MultiTermVectorOperation<reuters>(n)
    {
        TermStatistics = true
    })
});

Запрос здесь будет против /news/reuters/_mtermvectors?fields=summary

Низкоуровневое решение: используйте вызов низкого уровня, как показано ниже, если кому-то это нужно

string sbRequestBody = "{\"ids\":[\"1\", \"2\"],\"parameters\":{\"fields\": [\"body\"],\"term_statistics\":true}}";         
var termvecResponse =Client.LowLevel.Mtermvectors<MultiTermVectorsResponse>("news", "reuters", sbRequestBody);
Другие вопросы по тегам