2015-07-28 81 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毫秒的響應時間...猜猜它是好的;-) –