我正在尝试将 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}