我目前正在制作有针对性的广告系统。 我跟踪用户的偏好,我应该相应地检索广告。 我使用 elasticsearch 对广告进行索引,其中我为广告代码编制索引:
curl -XPUT localhost:9200 / ads / ad / ad789 -d'{ “tags”:[“sports”,“gaming”] }“
现在有了棘手的部分, 我希望根据用户的推广,将标签运动的广告增加8,将游戏增加2 偏好。
答案 0 :(得分:2)
您可以使用多个过滤器设置function_score
查询,其中每个过滤器匹配时会提供不同的提升。例如,如果文档得分具有“体育”标记,则该查询将乘以8,如果它包含“游戏”标记,则将其乘以2。
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"term": {
"tags": "sports"
}
},
"boost_factor": 8
},
{
"filter": {
"term": {
"tags": "games"
}
},
"boost_factor": 2
}
]
}
}
}
默认情况下,提升值将与查询得分相乘。或者,您可以使用boost_mode
参数仅使用功能分数代替(替换),将功能分数添加到查询分数(总和),平均功能分数和查询分数(平均值),或使用最大值/ min函数得分或查询得分(max,min)。
有关详细信息,请参阅function_score documentation。