Как использовать функцию 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);