2015-07-28 23 views
0

我在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 
      ] 
     } 
     } 
    ] 
    } 
} 

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

+0

这不是有效的JSON,因为searchTerms字段中的字符'here:'Draadmaat(inch)1/2“' –

+0

我想它在这里显示为非有效的JSON,因为我在复制该文本后很满意。但无论如何tnx! –

回答

1

为什么不使用script filter,调用执行脚本字段代码的脚本并检查条件。 有关如何尝试它的更多信息可以发现here

+0

我试过了,因为上帝知道有多少次,但groovy解析器失败。有什么方法可以调试这些方法吗? –

+0

你可以给我代码示例失败吗? –

+0

Oooops ...一个字符串不是一个整数: - $ ...小提琴小提琴小提琴直到它工作 –

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代码写作...

+0

原来我没有这么好与groovy:D –

+0

需要2毫秒的响应时间...猜猜它是好的;-) –

相关问题