2016-04-12 17 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)も廃止され。すべてを削除して、 'range'と' script'を含む 'bool/filter'を使用するだけです。 – Val

+0

@Val:はい、あなたは正しいでしょう.html – Richa

+0

@val例を挙げることができますか? – michaelmol

0

@ Richaの回答に対する私のコメントで述べたように、filteredのクエリはdeprecatedです。すべて削除するだけで、rangescriptフィルタを含むbool/filterを使用してください。

{ 
    "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

関連する問題