如何使用NEST的FunctionScoreQuery构造指定格式的script_score查询
你当前写法的问题是将ScriptScoreQuery错误放到了FunctionScoreQuery的Query属性中,导致生成的JSON结构不符合预期。你需要的script_score属于function_score的评分函数配置,不属于查询条件范畴。
如果使用的是NEST Elasticsearch客户端,正确写法如下:
var q = new FunctionScoreQuery { Functions = new List<IScoreFunction> { new ScriptScoreFunction { Script = new InlineScript("doc['some-field'].value") } }, IsVerbatim = true };
上述代码生成的DSL和你需要的目标结构完全一致,提交到ES即可正常执行。
额外补充:如果你没有其他评分函数需要组合使用,也可以直接使用ScriptScoreQuery作为顶层查询,不需要外层包裹FunctionScoreQuery,进一步简化代码:
var q = new ScriptScoreQuery { Script = new InlineScript("doc['some-field'].value"), IsVerbatim = true };
对应的DSL为:
{ "script_score": { "script": "doc['some-field'].value" } }
该写法也能达到相同的按指定字段值评分的效果。
内容的提问来源于stack exchange,提问作者liupro925
相关产品推荐
相关产品推荐

