2015-07-28 3 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 здесь:' Draadmaat (дюйм) 1/2»' –

+0

я думаю он показал здесь как недействительный JSON, потому что я скопировал этот текст после того, как он был ограничен. но tnx в любом случае! –

ответ

1

Почему бы не использовать script filter, вызовите скрипт, который выполняет код поля сценария и проверяет условие. Подробнее о том, как это сделать, можно найти: here.

+0

Я пробовал это, потому что бог знает, сколько раз, но безупречный парсер терпит неудачу. Есть ли способ отладить эти методы? –

+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 мс дольше в ответе ... Угадайте, все в порядке ;-) –

Смежные вопросы