2017-08-09 52 views
0

全部,如何使用elasticsearch中的MultiTermVectors功能嵌套

我已經在elasticsearch中索引了許多xml文件,以便爲新聞和類型路透社編制索引。然後我可以使用

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通話是在/新聞/ _mtermvectors而不是/新聞/路透社/ _mtermvectors任何想法?謝謝您的幫助。

低級別的解決方案: 使用的低級調用,比如下面是否有人需要它

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

回答

1

,你提供給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

+0

完美,謝謝! – sramalingam24

0

低級別的解決方案:使用的低級調用,比如下面是否有人需要它

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