2017-08-09 51 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);