《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.3.Search通过Kibana(9) https://developer.aliyun.com/article/1231062
Function score query 查询
Function score 允许你控制查询评分,是用来控制评分过程的终极武器。最高效的用法是用过滤器对结果的子集应用不同的函数,同时运用了 filter 的缓存,并且达到控制评分的过程。
我们想让山东的苹果搜索出现在美国苹果之前,查询商品名称包含“苹果”,当品牌中包含“美国”时,权重设置为 2,当出现“山东”时,权重设置为 40 。
GET /my_goods/_search { "query": { "function_score": { "query": { "term": { "goodsName": { "value": "苹果" } } }, "boost": 2, "functions": [ { "filter": { "match":{ "brandName":"美国" } }, "random_score": { }, "weight": 2 }, { "filter": { "match":{ "brandName":"山东" } }, "weight": 40 } ], "max_boost": 60, "score_mode": "max", "boost_mode": "multiply", "min_score": 2 } } }
返回主要信息:
"max_score" : 2.2442641, "hits" : [ { "_index" : "my_goods", "_type" : "_doc", "_id" : "4", "_score" : 2.0562985, "_source" : { "goodsName" : "山东苹果UA55RU7520JXXZ 苹果54英寸 5K超高清", "brandName" : "山东苹果" } }, { "_index" : "my_goods", "_type" : "_doc", "_id" : "3", "_score" : 1.7582327, "_source" : { "goodsName" : "苹果UA55RU7520JXXZ 53英寸 4K高清", "brandName" : "美国苹果", } } ]
解释几个参数:
l score_modemultiply: 默认,分数相乘
l avg:平均分数,第一个 function 的分数
l max:使用评分最大的分数
l min:使用评分最小的分数
举例,如果 2 个函数返回的分数为 1 和 2,并且它们的权重分别为 3 和 4,则他们的评分为:(1*3+2*4)/(3+4)
其他详解请参考官方score-functions详解:
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.3.Search通过Kibana(11) https://developer.aliyun.com/article/1231060