使用ElasticSearch对无限制值的衰减过滤器函数

时间:2014-10-03 08:06:36

标签: boost elasticsearch

我在ElasticSearch索引中有以下文档(至少1 000 000):

{"title":"toto", "views":132, "likes":23, "date" : "2014-09-01..." ...}

使用lang分析器对title进行索引时,views和likes字段是0到无穷大的整数,日期是..date字段。

我希望按标题进行搜索,如果文档是最近的并且具有很高的观看次数,则会提升文档。

我正在使用衰减过滤器函数作为日期(从今天起作为原点),它按预期工作,但我不知道如何增强视图和喜欢字段,因为我没有最大起源。

这是我的搜索查询:

POST /threads/_search
{
   "query": {
      "function_score": {
         "query": {
            "multi_match": {
               "query": "air france",
               "type": "phrase",
               "fields": [
                  "title^4",
                  "desc"
               ]
            }
         },
         "functions": [
            {
               "exp": {
                  "date": {
                     "origin": "2014/09/29 13:00:00",
                     "scale": "12h",
                     "offset":"6h",
                     "decay":0.5
                  }
               }
            }
         ]
      }
   }
}

1 个答案:

答案 0 :(得分:1)

您可以按照文档中的this section尝试" field_value_factor"。而且您需要测试和评估结果,修改"因素"和你给予的提升" title"然后再次测试,看看它是否越来越接近你需要的东西了。此外,您可以使用search=explain查看ES如何计算_score。像这样:

POST /threads/_search?explain
{
  "query": {
      "function_score": {
         "query": {
            "multi_match": {
               "query": "air france",
               "type": "phrase",
               "fields": [
                  "title^8",
                  "desc"
               ]
            }
         },
         "functions": [
            {
               "exp": {
                  "date": {
                     "origin": "2014/09/29 13:00:00",
                     "scale": "12h",
                     "offset":"6h",
                     "decay":0.5
                  }
               }
            },
            {
              "field_value_factor": {
                "field": "views",
                "modifier": "log2p",
                "factor": 0.1
              }
            },
            {
              "field_value_factor": {
                "field": "likes",
                "modifier": "log2p",
                "factor": 0.1
              }
            }
         ]
      }
   }
}