2016-04-12 60 views
1

我正在嘗試執行以下操作,但這會導致null_pointer_exception。在彈性搜索中結合範圍和腳本過濾器

我想實現的是一個範圍(獨立工作)和篩選所有星期六之間的結果。不過,我嘗試過濾器。那麼有沒有辦法將這些過濾器結合起來,還是應該尋找替代解決方案?

"query": { 
     "filtered": { 
      "query": { 
       "match_all": [] 
      }, 
      "filter": { 
       "range": { 
        "myDateField": { 
         "from": "2015-10-09 00:00:00", 
         "to": "2015-12-31 00:00:00" 
        } 
       }, 
       "script": { 
        "script": ["doc['myDateField'].date.dayOfWeek == 6"] 
       } 
      } 
     } 
    }, 

回答

0

如果您的版本是< 2.x.使用bool filter多個查詢組合:

{ 
"query": { 
    "bool": { 
    "must": [ 
     { 
      "range": { 
       "myDateField": { 
       "from": "2015-10-09 00:00:00", 
       "to": "2015-12-31 00:00:00" 
       } 
      } 
     }, 
     { 
      "script": { 
       "script": [ 
       "doc['myDateField'].date.dayOfWeek == 6" 
       ] 
      } 
     } 
    ] 
    } 
    } 
} 

Filters已經在2.x版被棄用。您可以使用Bool Query來實現相同。

+1

注意,['filtered'查詢](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html)已過時,太。你應該把它全部刪除,只需使用'bool/filter'包含'range'和'script' – Val

+0

@Val:是的,你說得對.Thnx – Richa

+0

@val你可以舉個例子嗎? – michaelmol

0

正如我在@ Richa的回答中所述,filtered查詢也是deprecated。您應該將其全部刪除,只需使用bool/filter即可,其中包含rangescript過濾器。

{ 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "range": { 
      "myDateField": { 
       "from": "2015-10-09 00:00:00", 
       "to": "2015-12-31 00:00:00" 
      } 
      } 
     }, 
     { 
      "script": { 
      "script": [ 
       "doc['myDateField'].date.dayOfWeek == 6" 
      ] 
      } 
     } 
     ] 
    } 
    } 
} 
+0

這是否適合您? – Val