2017-08-09 5 views
0

Alle verwenden,Wie die MultiTermVectors Funktion in Elasticsearch Nest

ich eine Reihe von XML-Dateien in Elasticsearch indizieren Nachrichten indiziert und reuters eingeben. Ich kann dann

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

verwenden, um den Begriff Vektor für das erste Dokument zu erhalten. Meine Frage ist, wie ich den Anruf verwenden kann

Client.MultiTermVectors<reuters> 

ich versucht habe

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

Es gibt leeren Begriff Vektoren und das Response-Objekt sagt der POST Aufruf war auf/news/_mtermvectors statt/news/Reuters/_Mtermvectors irgendwelche Ideen? Danke für die Hilfe.

Low-Level-Lösung: den Lowlevel-Aufruf verwendet, wie unten, wenn jemand es braucht

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

Antwort

1

Die Dokumente, die Sie auf den Multitermvektoren zur Documents Eigenschaft sind Versorgung fordern enthält kein Feld Ziel für Termstatistiken wie der einzelne Aufruf. Wenn alle Dokumente die gleichen Felder gezielt werden, können Sie

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

Die Anfrage wird es hier sein verwenden gegen /news/reuters/_mtermvectors?fields=summary

+0

Perfekt, danke! – sramalingam24

0

Low-Level-Lösung: Verwendet, um die Low-Level-Aufruf wie unten, wenn jemand es

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