lucene ElasticSearch:如何根据字段值提高分数?

ddrv8njm  于 2022-11-07  发布在  Lucene
关注(0)|答案(3)|浏览(169)

我试图通过基于字段值提升_score来摆脱ElasticSearch中的排序。
我的文档中有一个字段:applicationDate。这是自EPOC以来经过的时间。我希望applicationDate越大(最近)的记录具有越高的分数。
如果两个文档的分数相同,我想在另一个字符串类型的字段上对它们进行排序。假设“status”是另一个可以有值的字段(可用、进行中、关闭)。因此,具有相同applicationDate的文档应该具有基于状态的_score。可用应该具有更多的分数,进行中应该具有更少的分数,关闭应该具有最少的分数。因此,通过这种方式,我不必在获得结果后对文档进行排序。
请给予我一下。

bakd9h0s

bakd9h0s1#

您应该可以使用Function Score来实现这一点。根据您的要求,它可以像下面的示例一样简单:

put test/test/1 
{
     "applicationDate" : "2015-12-02",
     "status" : "available"
}
put test/test/2
{
     "applicationDate" : "2015-12-02",
     "status" : "progress"
}

put test/test/3
{
     "applicationDate" : "2016-03-02",
     "status" : "progress"
}

post test/_search
{
   "query": {
      "function_score": {
         "functions": [
             {
               "field_value_factor" : {
                    "field" : "applicationDate",
                    "factor" : 0.001
               }
             },
            {
               "filter": {
                  "term": {
                     "status": "available"
                  }
               },
               "weight": 360
            },
            {
               "filter": {
                  "term": {
                     "status": "progress"
                  }
               },
               "weight": 180
            }
         ],
         "boost_mode": "multiply",
         "score_mode": "sum"
      }
   }
}

**Results:**

"hits": [
     {
        "_index": "test",
        "_type": "test",
        "_id": "3",
        "_score": 1456877060,
        "_source": {
           "applicationDate": "2016-03-02",
           "status": "progress"
        }
     },
     {
        "_index": "test",
        "_type": "test",
        "_id": "1",
        "_score": 1449014780,
        "_source": {
           "applicationDate": "2015-12-02",
           "status": "available"
        }
     },
     {
        "_index": "test",
        "_type": "test",
        "_id": "2",
        "_score": 1449014660,
        "_source": {
           "applicationDate": "2015-12-02",
           "status": "progress"
        }
     }
  ]

相关问题