根据弹性搜索中的用户偏好提升

时间:2014-01-15 21:49:27

标签: elasticsearch

我目前正在制作有针对性的广告系统。 我跟踪用户的偏好,我应该相应地检索广告。 我使用 elasticsearch 对广告进行索引,其中我为广告代码编制索引:

  

curl -XPUT localhost:9200 / ads / ad / ad789 -d'{       “tags”:[“sports”,“gaming”]       }“

现在有了棘手的部分, 我希望根据用户的推广,将标签运动的广告增加8,将游戏增加2 偏好。

1 个答案:

答案 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