C# コードベースを、ElasticSearch.NET クライアントを使用する F# に変換しようとしています。F# は正しい型を適切に推論していないようです。
動作する C# コードは次のとおりです。
var res = es.Search<Question>(s => s
.Query(q => q
.FunctionScore(fs => fs
.Query(fq => fq.MatchAll())
.Functions(f => f.RandomScore(r.Next()))
)).Size(count).Index("questions"));
同等または一致する F# コードを以下に示しますが、コンパイルされません。
let questions = es.Search<Question>(fun s ->
s.Query(fun q -> q.FunctionScore(
fun fs -> fs.Query(
fun fq->fq.MatchAll()).Functions(
fun f -> f.RandomScore(r.Next())) |> ignore)).Size(count).Index("questions")).Documents.ToList()
このコードは F# を使用して正しく動作しますが、必要なものではありません。
let questions2 = es.Search<Question>(fun s -> s.Query(fun q -> q.MatchAll())).Documents.ToList()
コンパイルしない F# では、次のエラーが表示されます。
このプログラムの前の情報に基づいて、不定型のオブジェクトを検索します。オブジェクトの型を制約するために、このプログラム ポイントの前に型注釈が必要になる場合があります。これにより、ルックアップを解決できる場合があります。
Question の F# 型シグネチャは次のとおりです。
type Question = {id:Guid, Text:string}