2016-11-27 82 views
1

我有兩個嵌套2.3的代碼片斷,我沒有能夠在最新的5.0.0-rc3中配合。NEST 5.x字段使用

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

這裏的生成錯誤是 「無法隱式轉換Nest.Field []以Nest.Fields」。我可以做類似

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

但是後來我失去了現場加權。我一直有與煩惱

第二場useagle是

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

建立自己的錯誤這裏是「Nest.SearchDescriptor」不包含「場」的定義,並沒有擴展方法「字段」接受第一類型「Nest.SearchDescriptor」的說法可以找到(是否缺少using指令或程序集引用?

我還沒有與得到的東西編譯能夠在任何情況下運氣。

回答

2

隱轉換0的運算符在最新版本的5.x中缺少至Fields;除了其他有用的重載外,我還會添加它,以進入下一個版本。在此期間,您可以構建從強類型字段Fields和使用促進

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

您也可以使用字符串太

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

對於第二部分,.Fields()SearchRequest現在.StoredFields()in line with the change in Elasticsearch,以指示它僅用於檢索存儲的字段(those set to store:true in the mapping)。如問題所述,如果您使用.Fields()_source字段中檢索部分文檔,建議您使用source filtering