在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

查询中怎样使用自定义的评分公式?

Elasticsearch | 作者 osborn | 发布于2016年03月08日 | 阅读数:7695

我有一组描述图片内容的文档,其中一条数据如下:
keyword: man,sitting,table,working,business
quality:10
downloads:238

其他文档的结构类似。

我希望在搜索的时候,比如用户搜"man"的时候,命中了这条数据,这时man这个term会自带lucene默认打出的分数_score,而我要用自定义评分公式控制评分,最终的分值是

_score + quality + downloads

quality和downloads就是图片数据中的这两项的值。
要怎么写查询请求才能实现?
已邀请:

helloes

赞同来自:

用function score query,组合2个FieldValueFactorFunction,然后score_mode设置为sum

helloes

赞同来自:

mapping没什么特别,query如下:
{
"query" : {
"function_score" : {
"query" : {
//your query
},
"functions" : [ {
"field_value_factor" : {
"field" : "quality"
}
}, {
"field_value_factor" : {
"field" : "downloads"
}
} ],
"score_mode" : "Sum"
}
}
}
类似这样, quality和downloads的值在建索引之前做一些数学计算,看能不能满足。

要回复问题请先登录注册