4

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

0 に答える 0