簡體   English   中英

ElasticSearch / Painless:如何訪問/求和對象中的所有值

[英]ElasticSearch/Painless: How do I access/sum all values in an object

我一直在研究聚合,以及使用painless編寫腳本,而我卻無法弄清楚如何對對象中的所有值進行迭代/求和。

例:

我的映射看起來像

"field1": {
  "properties": {
    "subfield1": {
      "type": "float"
    },
    "subfield2": {
      "type": "float"
    },
    "subfield3": {
      "type": "float"
    }
  }
}

假設我的數據如下所示:

{
  "field1" : {
    "subfield1": 50.0,
    "subfield2": 20.5,
    "subfield3": 30.5
  }
}

我想在50.0 + 20.5 + 30.5上執行范圍查詢,或者,基本上,以某種方式訪問field1對象內的所有值。

匯總不允許我在字段中使用通配符。 我正在查看LeafDocLookup的代碼 (內部使用它來實現無痛操作),並且發現相關方法已禁用。

我設法這樣編寫腳本:

"query": {
  "script": {
    "script": {
      "inline": "return (doc['field1.subfield1'].value + doc['field1.subfield2'].value + doc['field1.subfield3'].value > 50);",
      "lang": "painless"
    }
  }
}

但這顯然不是最佳選擇,並且不能解決動態鍵的主要問題。

我終於想通了! 這是不是在現有doc elasticsearch內的對象,但它中可用_ctx.source

因此,如果我使用params['_source'] ,則可以將該對象作為Java HashMap對象進行訪問

"query": {
  "script": {
    "script": {
      "inline": "float sum = 0.0f; for (float v: params['_source'].values()) { sum += v; } return (sum > 50);",
      "lang": "painless"
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM