2016-07-02 5 views
0

にあります。NEST 1.6.2から2.3.3へのアップグレード。FunctionScoreFunctionsDescriptorとFunctionScoreFunctionの同等の型は、2.3.3

NEST 2.3.3のFunctionScoreFunctionsDescriptorFunctionScoreFunctionの新しいタイプは何ですか?

are FunctionScoreFunctionsDescriptor - >ScoreFunctionsDescriptorFunctionScoreFunction - >ScoreFunctionsDescriptor

そのような場合、我々はvar functionScores = new List<Func<ScoreFunctionsDescriptor<IndexData>, ScoreFunctionsDescriptor<Property>>>()を構築するが、どのように我々は

var searchDescriptor = new SearchDescriptor<IndexData>() .Paged(pageable) .Query(q => q .FunctionScore(fs => fs.Functions(***How do we pass the functionScores***));

にこれを伝承ん我々は以下のようにそれを構築することができますか?

functionScores.ForEach(f => searchDescriptor.Query(q => q.FunctionScore(fc => fc.Functions(f))));

答えて

1

function_scoreクエリ、すなわちスコアディスクリプタを取得し、機能のリストを返す関数IEnumerable<IScoreFunction>又はFunc<ScoreFunctionsDescriptor<T>, IPromise<IList<IScoreFunction>>>のいずれかをとることができます。 ScoreFunctionsDescriptor<T>は、私たちが一緒に機能の束を集約したい場合は、我々はScoreFunctionsDescriptor<T>を取る機能の束の上に集約している。この例ではScoreFunctionsDescriptor<T>

public class Document 
{ 
    public string Name { get; set;} 
    public GeoLocation Location { get; set;} 
} 

var functions = new List<Func<ScoreFunctionsDescriptor<Document>, ScoreFunctionsDescriptor<Document>>> 
{ 
    s => s.FieldValueFactor(fvf => fvf 
     .Field(f => f.Name).Weight(3)), 
    s => s.ExponentialGeoLocation(geo => geo 
     .Field(f => f.Location) 
     .Offset("1km") 
     .Origin(new GeoLocation(-33.87189, 151.21623)) 
     .Scale("2km") 
    ) 
}; 

client.Search<Document>(s => s 
    .Query(q => q 
     .FunctionScore(fs => fs 
      .Functions(sc => functions.Aggregate(sc, (a,f) => f(a))) 
     ) 
    ) 
); 

を返すことができ、これに基づきIPromise<IList<IScoreFunction>>

を実装します収量

{ 
    "query": { 
    "function_score": { 
     "functions": [ 
     { 
      "field_value_factor": { 
      "field": "name" 
      }, 
      "weight": 3.0 
     }, 
     { 
      "exp": { 
      "location": { 
       "origin": { 
       "lat": -33.87189, 
       "lon": 151.21623 
       }, 
       "scale": "2.0km", 
       "offset": "1.0km" 
      } 
      } 
     } 
     ] 
    } 
    } 
}