在Elasticsearch中按脚本输出过滤

时间:2015-07-28 11:18:06

标签: json groovy elasticsearch

我在Elasticsearch中使用脚本输出了一个很好的输出。

{
  "fields": [
    "_source"
  ],
  "script_fields": {
    "vermogen": {
      "script_file": "vermogen",
      "params": {
        "ruimtetemperatuur": 18,
        "aanvoertemperatuur": 85,
        "retourtemperatuur": 75
      }
    }
  },
  "query": {
    "bool": {
      "must": [],
      "must_not": [
        {
          "constant_score": {
            "filter": {
              "missing": {
                "field": "article.classification.Warmteafgifte EN 442 20gr C - 75/65"
              }
            }
          }
        }
      ]
    }
  }
}

并输出以下内容:

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 5099,
    "max_score": 1,
    "hits": [
      {
        "_index": "items",
        "_type": "article",
        "_id": "AU7PHf_Ltb4sVpfKz-ip",
        "_score": 1,
        "_source": {
          "articleCode": "430003",
          "description": "Paneelradiator Henrad Standaard 300-10-800 270W ",
          "searchTerms": "Aangelaste strippen Ja | Aansluitcombi 18 onderzijde links/onderzijde rechts Ja | Aansluitcombi 32 zijkant linksboven/zijkant linksonder Ja | Aansluitcombi 37 zijkant linksboven/zijkant rechtsonder Ja | Aansluitcombi 62 zijkant rechtsboven/zijkant linksonder Ja | Aansluitcombi 67 zijkant rechtsboven/zijkant rechtsonder Ja | Aansluitcombi 81 onderzijde rechts/onderzijde links Ja | Aantal standaard aansluitingen 4 | Diepte 47mm | Diepte 47mm | Diepte 47mm | Draadaansluiting Binnendraad | Draadmaat (inch) 1/2\" | Glansgraad Glanzend | Hoogte 300mm | Hoogte 300mm | Hoogte 300mm | Kleur Wit | Lengte 800mm | Lengte 800mm | Lengte 800mm | Materiaal Staal | Max. werkdruk 10bar | Met aftapaansluiting Ja | Met ontluchtingsaansluiting Ja | N-exponent 1.283' | RAL-nummer 9016' | Standaard kleur Ja | Type 10 | Type 10 | Type 10 | Type 10 | Vlakke voorplaat Geen | Warmteafgifte bepaald door erkend EN 442 laboratorium Ja | Warmteafgifte EN 442 20gr C - 75/65 270W | Warmteafgifte EN 442 20gr C - 75/65 270W | Warmteafgifte EN 442 20gr C - 75/65 270W | Waterinhoud 1.51l | convector Paneelconvector Convectorradiator radiator radiator rad. | 0430003 | EC011022 | StandardB Radiator",
          "grossPrice": 37.24,
          "supplier": "HENRAD ",
          "productClass": "EC011022",
          "classification": {
            "Aangelaste strippen": "Ja",
            "Aansluitcombi 11 onderzijde links/onderzijde links": "Nee",
            "Aansluitcombi 18 onderzijde links/onderzijde rechts": "Ja",
            "Aansluitcombi 32 zijkant linksboven/zijkant linksonder": "Ja",
            "Aansluitcombi 37 zijkant linksboven/zijkant rechtsonder": "Ja",
            "Aansluitcombi 45 bovenzijde links/bovenzijde rechts": "Nee",
            "Aansluitcombi 54 bovenzijde rechts/bovenzijde links": "Nee",
            "Aansluitcombi 62 zijkant rechtsboven/zijkant linksonder": "Ja",
            "Aansluitcombi 67 zijkant rechtsboven/zijkant rechtsonder": "Ja",
            "Aansluitcombi 81 onderzijde rechts/onderzijde links": "Ja",
            "Aansluitcombi 88 onderzijde rechts/onderzijde rechts": "Nee",
            "Aansluitcombi MB middenboven/middenboven": "Nee",
            "Aansluitcombi MO middenonder/middenonder": "Nee",
            "Aantal standaard aansluitingen": "4",
            "Diepte": "47mm",
            "Draadaansluiting": "Binnendraad",
            "Draadmaat (inch)": "1/2\"",
            "Geschikt voor elektrisch element": "Nee",
            "Geschikt voor vochtige ruimte": "Nee",
            "Glansgraad": "Glanzend",
            "Hoogte": "300mm",
            "Kleur": "Wit",
            "Lengte": "800mm",
            "Materiaal": "Staal",
            "Max. werkdruk": "10bar",
            "Met aftapaansluiting": "Ja",
            "Met aftapper": "Nee",
            "Met bevestigingsmateriaal": "Nee",
            "Met blindstoppen": "Nee",
            "Met bovenbekleding": "Nee",
            "Met eenpuntsaansluiting": "Nee",
            "Met elektrisch element": "Nee",
            "Met ontluchter": "Nee",
            "Met ontluchtingsaansluiting": "Ja",
            "Met thermostatisch ventiel geïntegreerd": "Nee",
            "Met wandconsoles": "Nee",
            "Met zijbekleding": "Nee",
            "N-exponent": "1.283'",
            "RAL-nummer": "9016'",
            "Standaard kleur": "Ja",
            "Type": "10",
            "Vlakke voorplaat": "Geen",
            "Warmteafgifte bepaald door erkend EN 442 laboratorium": "Ja",
            "Warmteafgifte EN 442 20gr C - 75/65": "270W",
            "Waterinhoud": "1.51l"
          }
        },
        "fields": {
          "vermogen": [
            355.81461733776723
          ]
        }
      }
    ]
  }
}

到目前为止一直很好,但我想查询此脚本的输出。这可能吗??欢迎任何帮助!

2 个答案:

答案 0 :(得分:1)

为什么不使用script filter,调用执行脚本字段代码的脚本并检查条件。 有关如何试用的更多信息,请访问here

答案 1 :(得分:0)

这是我的grooooovy代码:

if(!_source.classification.empty && (_source.classification["Warmteafgifte EN 442 20gr C - 75/65"] != null) && (!_source.classification["Warmteafgifte EN 442 20gr C - 75/65"].empty) && (_source.classification["N-exponent"] != null) && (!_source.classification["N-exponent"].empty))
{   
    def wattOrg = (_source.classification["Warmteafgifte EN 442 20gr C - 75/65"].replaceAll("[^\\d.]", "")) as float;   
    def exponent = _source.classification["N-exponent"].replaceAll("[^\\d.]", "") as float;
    def ruimtetemperatuurF = ruimtetemperatuur as float;
    def aanvoertemperatuurF = aanvoertemperatuur as float;
    def retourtemperatuurF = retourtemperatuur as float;

return (((((aanvoertemperatuurF + retourtemperatuurF) / 2F) - ruimtetemperatuurF) / 50F ) ** exponent) * wattOrg;
}
return -1;

//MSSQL: ROUND( POWER( (((Aanvoertemperatuur + Retourtemperatuur) / 2) - Ruimtetemperatuur) / 50, [N-exponent]) * WattOrg , 0)   AS Vermogen 

需要注意吗?在Java / Groovy代码编写方面我非常 ......