我目前正在尝试在 NEST 中实现“function_score”查询,其中的函数仅在过滤器匹配时应用。
看起来 FunctionScoreFunctionsDescriptor 还不支持添加过滤器。是否会很快添加此功能?
这是我希望能够实现的 super 基本示例:
- 使用基本分数运行 ES 查询
- 遍历函数列表,并向其中添加过滤器匹配的第一个分数
"function_score": {
"query": {...}, // base ES query
"functions": [
{
"filter": {...},
"script_score": {"script": "25"}
},
{
"filter": {...},
"script_score": {"script": "15"}
}
],
"score_mode": "first", // take the first script_score where the filter matches
"boost_mode": "sum" // and add this to the base ES query score
}
我目前正在使用 Elasticsearch v1.1.0 和 NEST v1.0.0-beta1 预发布版本。
谢谢!
最佳答案
已经实现了:
_client.Search<ElasticsearchProject>(s =>
s.Query(q=>q
.FunctionScore(fs=>fs.Functions(
f=>f
.ScriptScore(ss=>ss.Script("25"))
.Filter(ff=>ff.Term(t=>t.Country, "A")),
f=> f
.ScriptScore(ss=>ss.Script("15"))
.Filter(ff=>ff.Term("a","b")))
.ScoreMode(FunctionScoreMode.first)
.BoostMode(FunctionBoostMode.sum))));
关于elasticsearch 嵌套支持 functionscore 函数中的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23484300/