gpt4 book ai didi

elasticsearch - 将多个不同的function_score与Elasticsearch结合

转载 作者:行者123 更新时间:2023-12-02 22:27:49 28 4
gpt4 key购买 nike

我有几个不同的Elasticsearch function_score,但是我不确定如何组合它们

这是我正在查看的测试集(我添加了注释,以便能够引用问题中的特定项目,这些注释实际上不在索引中)

[
{ // Item 1
"priority": 0.7,
"classification": [
{
"feature": "A",
"confidence": 0.4
},
{
"feature": "C",
"confidence": 0.3
},
{
"feature": "B",
"confidence": 0.6
}
]
},
{ // Item 2
"priority": 0.8,
"classification": [
{
"feature": "A",
"confidence": 0.3
},
{
"feature": "C",
"confidence": 0.6
}
]
},
{ // Item 3
"priority": 0.4,
"classification": [
{
"feature": "D",
"confidence": 0.6
},
{
"feature": "C",
"confidence": 0.8
}
]
}
]

现在假设我要对具有以下权重的项目评分:
  • “A”,重量为2
  • “B”,权重为3

  • 我要执行以下操作:
  • 仅针对要素“A”和“B”计算每个项目的平均置信度(例如,项目1的平均置信度为0.5)
  • 计算每个项目的优先级(例如0.8项目2的受欢迎程度)
  • 计算每个项目要素的权重之和(如果项目具有要素“A”,则其权重为2,如果
    它具有特征“B”,它的权重为3。项目1的权重为5,项目2的权重为2)
  • 将不同的计算结果合并为最终分数

  • 我知道如何为平均置信度创建function_score,就像这样:
    {
    "nested": {
    "path": "classification",
    "query": {
    "function_score": {
    "functions": [
    {
    "field_value_factor": {
    "field": "classification.confidence",
    "missing": 0
    },
    "weight": 0
    }
    ],
    "query": {
    "terms": {
    "classification.feature": [
    "A",
    "B"
    ]
    }
    },
    "score_mode": "avg"
    }
    }
    }
    }

    我也知道如何为优先级字段创建功能分数,就像这样:
    {
    "function_score": {
    "functions": [
    {
    "field_value_factor": {
    "field": "popularity",
    "missing": 0
    },
    "weight": <some-weight>
    }
    ],
    "score_mode": "sum"
    }
    }

    我认为(但不确定)我知道如何为特征权重的总和创建函数分数(忽略不匹配“A”或“B”的特征的权重)。可能是这样的:
    {
    "query": {
    "function_score": {
    "query": {
    "bool": {
    "should": [
    { "match": { "classification.feature": "A" } },
    { "match": { "classification.feature": "B" } }
    ]
    }
    },
    "functions": [
    {
    "filter": { "match": { "classification.feature": "A" } },
    "weight": 2
    },
    {
    "filter": { "match": { "classification.feature": "B" } },
    "weight": 3
    },
    ],
    "score_mode":"sum"
    }
    }
    }

    但是我不知道如何组合这3个不同的功能分数(我目前尚不确定实际的组合功能是什么。我将需要使用不同的功能并确定哪个功能最适合我,但出于疑问,我们可以说我想对我的3个function_score的结果进行平均)

    所以我的问题是:
  • 是否可以定义多个function_score,然后定义如何组合它们?
  • 如果无法合并多个function_score,我应该采用哪种方法来解决此问题? (我不固定使用3个不同的function_score,但不确定如何执行此操作)
  • 尽管我说过我想对所有function_score结果进行平均,但我稍后可能想做一些
    像这样更复杂:score("popularity") + (score("feature-weight") * score("confidence"))-是
    有没有办法实现这一目标?

  • 我目前正在ES 2.4.5(我不赞成使用)上对此进行测试。我们将很快升级
    无论如何,但:
  • 是否只能使用更高版本的ES来实现?
  • 即使仅在更高版本的ES中可行,我仍然想知道如何实现它(并在升级后使用它)

    谷歌搜索没有得到任何有用的信息

    提前致谢

  • 最佳答案

    我认为您应该使用script_score。它允许使用字段文档的值来计算分数。使用script_score,您无需编写多个function_score

    您还可以将参数传递给功能分数,以在查询时设置功能的权重。

    该文档中有一个Elasticsearch 2的高级示例,用于script_score的高级用法:https://www.elastic.co/guide/en/elasticsearch/guide/current/script-score.html

    关于elasticsearch - 将多个不同的function_score与Elasticsearch结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56414884/

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