Elastic Search 5.1在function_score中保留原始的_score?

时间:2018-08-17 01:56:54

标签: elasticsearch

我有一个类似

的架构
{
  mappings: {
    business: {
      properties: {
        business_id: {type: integer}
        business_category_ids: {type: integer}
        price: {type: float}
      }
    }
  }
}

我阅读了ES doc,我们可以使用function_score来转换_score,如下所示:

{
  "size": 100,
  "query": {
    "function_score": {
      "query": {
        "term": {
          "business_category_ids": 4
        }
      },
      "script_score": {
        "script": "_score * 1 / doc['price']"
      }
    }
  }
}

并获得以下结果:

{
  "hits": {
    "hits": [
      {
        "_score": 4.12,
        "_source": ..
      },
      {
        "_score": 3.10,
        "_source": ..
      }
    ]
  }
}

但是,在转换_score之后,我们失去了在查询子句中获得的原始_score的跟踪。但是我对原始_score的后分析感兴趣。

我想知道是否有任何方法可以保留/记录原始的_score

我想到了两种方法,然后快速平移:

  • 只需使用不带query的{​​{1}}即可返回前100个文档(以script_score而言为top),并在应用程序级别计算_score。但是,在我的情况下,Elastic Search仅返回100个文档,并且基于_score* 1 / doc['price']的前100个文档肯定与基于_score的前100个文档不同

  • 对所有文档进行弹性搜索并为其返回_score * 1 / doc['price']。然后在应用程序级别,根据_score对所有文档进行排序,然后选择前100个文档。在这种情况下,我可以同时获得1)前100个文档的准确排名2)_score * 1 / doc['price']。但是,这非常耗时,因为我们必须返回数百万个文档...

Elastic Search是否提供任何功能来保留原始的_score

0 个答案:

没有答案