2017-08-09 3 views
0

Tous,Comment utiliser la fonction MultiTermVectors dans ElasticSearch nid

J'ai répertorié un certain nombre de fichiers XML dans ElasticSearch aux nouvelles index et le type reuters. Je peux alors utiliser

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

pour obtenir le terme vecteur pour le premier document. Ma question est de savoir comment puis-je utiliser l'appel

Client.MultiTermVectors<reuters> 

J'ai essayé

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 
      }) 
     }); 

Il retourne vecteurs vides terme, et l'objet de réponse, dit l'appel POST était/nouvelles/_mtermvectors au lieu de/nouvelles/reuters/_mtermvectors des idées? Merci pour l'aide.

solution à faible niveau: occasion l'appel lowlevel comme ci-dessous si quelqu'un a besoin

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

Répondre

1

Les documents que vous fournissant à la propriété Documents sur les vecteurs multi terme demander ne contiennent pas un champ cible pour les statistiques de terme comme le fait l'appel unique. Si tous les documents cibleront les mêmes champs, vous pouvez utiliser

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 
    }) 
}); 

La demande ici sera contre /news/reuters/_mtermvectors?fields=summary

+0

Parfait, merci! – sramalingam24

0

solution à faible niveau: Utilisé l'appel lowlevel comme ci-dessous si quelqu'un a besoin

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