2016-11-27 2 views
1

Ich habe zwei Codeschnipsel von Nest 2.3, die ich nicht in der Lage war, in der neuesten Version 5.0.0-rc3 zu kooperieren.NEST 5.x Felder Verwendung

var titleField = Infer.Field<Page>(p => p.Title, 2); 
     var metaDescriptionField = Infer.Field<Page>(p => p.MetaDescription, 1.5); 
     var metaKeywordsField = Infer.Field<Page>(p => p.Keywords, 2); 
     var bodyField = Infer.Field<Page>(p => p.Body); 

     MultiMatchQuery multiMatchQuery = new MultiMatchQuery() 
     { 
      Fields = new [] { 
       bodyField, 
       metaKeywordsField, 
       metaKeywordsField, 
       titleField 
      }, 
      Query = search.Term 
     }; 

Der Build-Fehler ist hier "konvertieren kann nicht implizit Nest.Field [], um Nest.Fields". Ich kann etwas tun wie

MultiMatchQuery multiMatchQuery = new MultiMatchQuery() 
     { 
      Fields = Infer.Fields<Page>(p => p.Title, p => p.MetaDescription, p => p.Keywords, p => p.Body), 
      Query = search.Term 
     }; 

Aber dann verliere ich die Feldgewichtung.

Zweites Feld useagle Ich habe mit Problemen, die ist

var searchResponse = client.Search<Page>(s => s 
      .MatchAll() 
      .From(from) 
      .Size(size) 
      .Fields(f => f.Field(fi => fi.Id).Field(fi => fi.SourceId)) 
      ); 

Build-Fehler hier ist ‚Nest.SearchDescriptor‘ eine Definition für ‚Fields‘ enthält und keine Erweiterungsmethode ‚Fields‘ Annahme einer ersten Argument vom Typ ‚Nest.SearchDescriptor‘ gefunden werden (möglicherweise fehlt eine using-Direktive oder ein Assemblyverweis?

ich habe kein Glück gehabt mit etwas Kompilierung der Lage in dem Fall zu bekommen.

Antwort

2

die implizite Operator, der 0 konvertiertzu Fields fehlt in 5.x in der neuesten Version; Ich werde dies zusätzlich zu anderen hilfreichen Überladungen hinzufügen, um in die nächste Version zu kommen. In der Zwischenzeit können Sie eine Fields von Feldern mit starken Typisierung konstruieren und steigern mit

Fields fields = ((Fields)Infer.Field<Document>(f => f.Property1, 1.2)) 
        .And<Document>(f => f.Property2, 2) 
        .And<Document>(f => f.Property3, 5); 

Sie auch zu Strings

Fields fields = new[] 
{ 
    "property1^1.2", 
    "property2^2", 
    "property3^5" 
}; 

Für den zweiten Teil verwenden, .Fields() auf SearchRequest ist jetzt .StoredFields() , in line with the change in Elasticsearch, um anzuzeigen, dass es nur zum Abrufen gespeicherter Felder verwendet werden soll (those set to store:true in the mapping). Wie in dem Problem angegeben, wenn Sie verwenden, um ein Teildokument aus dem Feld _source abzurufen, wird empfohlen, dass Sie dafür source filtering verwenden.