当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch:将命中中的字段和内部命中中的字段相乘

谢志用
2023-03-14

我试图将两个字段相乘,其中一个字段在“命中”中,另一个字段在“inner_hits”中。

假设我有以下数据。

{
  "cost": 2.26,
  "sizes": [
    {
      "ratio": 1,
      "guid": "sfgsfdaa-bec9-42ef-8b3e-54957acc97f3"
    },
    {
      "ratio": 2,
      "guid": "sfgsadfg-1cc2-4c73-84e9-fa6c180e5874"
    },
    {
      "ratio": 3,
      "guid": "dhsfsfgs-c099-4c83-abbc-cc45a2ecaa46"
    }
  ]
}

“尺寸”字段是嵌套类型的。我正在使用以下查询按guid过滤。

{
  "query" : { 
    "nested": {
      "path": "sizes",
      "query": {
        "bool" : {
            "must" : [
                { "match": { "sizes.guid": "dhsfsfgs-c099-4c83-abbc-cc45a2ecaa46" }}
            ]
        }
      },
      "inner_hits": {}
    }
  }
}

查询结果如下

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 4.9041457,
    "hits" : [
      {
        "_index" : "test-index",
        "_type" : "_doc",
        "_id" : "3eEs43sBtPPJDcTfcaVG",
        "_score" : 4.9041457,
        "_source" : {
          "cost": 2.26, //field to be multipled
          "sizes": [
            {
              "ratio": 1,
              "guid": "sfgsfdaa-bec9-42ef-8b3e-54957acc97f3"
            },
            {
              "ratio": 2,
              "guid": "sfgsadfg-1cc2-4c73-84e9-fa6c180e5874"
            },
            {
              "ratio": 3,
              "guid": "dhsfsfgs-c099-4c83-abbc-cc45a2ecaa46"
            }
          ]
        },
        "inner_hits" : {
          "sizes" : {
            "hits" : {
              "total" : {
                "value" : 1,
                "relation" : "eq"
              },
              "max_score" : 4.9041457,
              "hits" : [
                {
                  "_index" : "test-index",
                  "_type" : "_doc",
                  "_id" : "3eEs43sBtPPJDcTfcaVG",
                  "_nested" : {
                    "field" : "sizes",
                    "offset" : 2
                  },
                  "_score" : 4.9041457,
                  "_source" : {
                    "ratio": 3, //field to be multipled
                    "guid": "dhsfsfgs-c099-4c83-abbc-cc45a2ecaa46"
                  }
                }
              ]
            }
          }
        }
      }
    ]
  }
}

这是我的问题。如何乘以“ratio”(在“hits”中)=

提前感谢!

共有1个答案

鱼锦
2023-03-14

类似的东西

jq -r '(.[].hits.hits[].inner_hits...... | tonumber)*(.[].hits.hits[]._source.cost | tonumber)'

应该这样做。

 类似资料:
  • 问题内容: 我有这样的文件 我需要更改为 为此,首先将字段映射添加到现有索引 然后尝试重新索引 错误是 问题答案: 该字段在您的文档中尚不存在,因此您的脚本需要首先创建它: 或更短一些:

  • 问题内容: 我正在尝试使用Java API通过Elasticsearch实现内部匹配,但是我找不到关于它的许多文档或其他人正在使用的示例。我的JSON搜索工作如下: 我在elasticsearch库中看到了InnerHitsBuilder和addInnerHit方法,但是找不到有关如何使用它们的文档。 问题答案: 请注意,ES源代码中有大量测试用例,正在测试每个功能,因此浏览ES代码是非常丰富的信

  • 问题内容: 我有此映射的索引: 在新索引中,我想将“ title”复制到“ title1”和“ title2”,将“ body”复制到“ body1”和“ body2”(不考虑“ other”),并将类型从“ page”更改为“ Articles_eng”。新索引具有以下映射: 通过查看此答案和Elasticsearch重新索引文档,我得出了类似以下内容: 我在脚本行上遇到了麻烦。如果仅执行第一行

  • 我有这样的实体结构 我执行条件查询 并在where子句的行上获取错误: 调试了一段时间后,我发现实体管理器的元模型中的父元类将属性子级保留为 AC 列表。 知道如何修复这个错误吗?

  • 假设我想存储一些关于会议日程的信息,包括演示时间和暂停时间。我可以在中执行此操作。 但是,如果我还想存储每个块需要多少,以便,我不能只是将其添加为属性: 在Python中这样做的正确方法是什么?如果我创建了一个< code>__init__(self)方法,并将它作为一个实例变量存储在那里,但是它将是可变的。

  • 我在elasticsearch中有一个文档索引,每个文档有480个字段。我试图做的是搜索一个词(例如“Apple”),并获得所有其值与搜索词匹配的唯一字段名。所以如果我的文档是: 作为查询的结果,我希望得到如下所示的聚合: 由于每个文档都有480个字段,所以我更喜欢执行multi_match查询,而不是使用包含所有字段的筛选器: 这个查询在ElasticSearch中可能吗?