用子字段长度归一化Elasticsearch分数

时间:2019-04-04 11:13:21

标签: elasticsearch

我在ElasticSearch中有一些文档,每个文档都有一个或多个附录。当我在附录的文本中进行搜索时,通常会得到大于1的分数。当我使用真正常见的模式进行搜索时,我意识到文档中的附录越多,其得分就越高。 因此,我的目标是通过将每个文档的得分除以其具有的附件数量来“标准化”得分。

例如,对于此查询:

"query": {
  "match": {
    "document.appendices.text" = "What is love?"
  }
}

我想做score = score / length(document.appendices),但我不知道该怎么表达。

是否可能,或者必须将所有附录都索引为文档才能实现?

非常感谢社区!

1 个答案:

答案 0 :(得分:0)

使用function_score查询来更改已经计算出的得分_score

GET /_search
{
    "query": {
        "function_score": {
            "query": {
                "match": { "document.appendices.text": "What is love?" }
            },
            "script_score" : {
                "script" : {
                  "source": "_score/doc['document.appendices'].length"
                }
            }
        }
    }
}

引用https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#score-functions