2016-01-25 44 views
2

Elasticsearch: The Definitive Guide當前版本使用的數據中進行搜索,那就是:Elasticsearch:如何在計算領域

[{ 
    "first_name" : "John", 
    "last_name" : "Smith", 
    "age" :  25, 
    "about" :  "I love to go rock climbing", 
    "interests": [ "sports", "music" ] 
}, { 
    "first_name" : "Jane", 
    "last_name" : "Smith", 
    "age" :   32, 
    "about" :  "I like to collect rock albums", 
    "interests": [ "music" ] 
}, { 
    "first_name" : "Douglas", 
    "last_name" : "Fir", 
    "age" :   35, 
    "about":  "I like to build cabinets", 
    "interests": [ "forestry" ] 
}] 

我想運行一個簡單的計算使用(我已經啓用Groovy腳本)請求數據:

{ 
    "query": { 
     "filtered": { 
      "filter": { 
       "range": { 
        "max_age": { 
         "gt": 150 
        } 
       } 
      } 
     } 
    }, 
    "script_fields": { 
     "max_age": { 
      "script": "_source.age * 5" 
     } 
    } 
} 

但ES沒有返回任何數據。我如何搜索計算字段?如果我不需要啓用腳本,它會更好。

回答

3

script_fields在查詢階段後計算,即during the fetch phase,因此您不能在查詢中引用腳本字段。

你需要什麼來實現仍然可以做,但是,通過使用script filter,像這樣:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "script": { 
      "script": { 
      "inline": "doc['age'].value * factor > max_age", 
      "params": { 
       "factor": 5, 
       "max_age": 150 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

而不是給MAX_AGE爲一定數量的,我可以用的東西一樣,「MAX_AGE =文檔。 field_a.values.max();」 –

+0

@ M.Prabhakaran可以找出腳本本身內數組中值的最大值。 – Val

+0

你能舉一些例子嗎? –