gpt4 book ai didi

elasticsearch - elasticsearch custom_score乘法不正确

转载 作者:行者123 更新时间:2023-12-03 02:09:51 24 4
gpt4 key购买 nike

我插入了一些文档,除了一个称为a的浮点字段外,它们都相同。

script查询的custom_score设置为_score时,对于与某些字段匹配的特定查询,结果得分为0.40464813。然后,对于相同的查询,将script更改为_score * a(mvel),其中a为9.908349251612433,最终得分将为4.0619955。

现在,如果我通过Chrome的JS控制台运行此计算,则会得到4.009394996051871。

  • 4.0619955(elasticsearch)
  • 4.009394996051871(Chrome)

  • 这是一个很大的差异,并且会导致错误的结果排序。为什么会这样,有没有办法纠正它?

    最佳答案

    如果我使用您提供的数字进行简单的计算,那么我将得到您期望的结果。

    curl -XPOST 'http://127.0.0.1:9200/test/test?pretty=1'  -d '
    {
    "a" : 9.90834925161243
    }
    '

    curl -XGET 'http://127.0.0.1:9200/test/test/_search?pretty=1' -d '
    {
    "query" : {
    "custom_score" : {
    "script" : "0.40464813 *doc[\u0027a\u0027].value",
    "query" : {
    "match_all" : {}
    }
    }
    }
    }
    '

    # {
    # "hits" : {
    # "hits" : [
    # {
    # "_source" : {
    # "a" : 9.90834925161243
    # },
    # "_score" : 4.009395,
    # "_index" : "test",
    # "_id" : "lPesz0j6RT-Xt76aATcFOw",
    # "_type" : "test"
    # }
    # ],
    # "max_score" : 4.009395,
    # "total" : 1
    # },
    # "timed_out" : false,
    # "_shards" : {
    # "failed" : 0,
    # "successful" : 5,
    # "total" : 5
    # },
    # "took" : 1
    # }

    我认为您在这里遇到的问题是跨多个分片测试的数据太少。

    默认情况下,文档频率是针对每个分片计算的。因此,如果您在shard_1上有两个相同的文档,而在shard_2上有一个文档,则shard_1上的文档得分会比shard_2上的文档低。

    有了更多的数据,文档频率往往会比分片均匀。但是,当测试少量数据时,您要么只想创建一个只有一个分片的索引,要么就将 search_type=dfs_query_then_fetch添加到查询字符串参数中。

    在计算分数之前,这将计算所有涉及的分片的全局文档频率。

    如果在查询中将 explain设置为 true,那么您可以确切地看到分数的计算方式

    关于elasticsearch - elasticsearch custom_score乘法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15378787/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com