2012-09-13 4 views
6

ElasticSearchインデックスからデータを削除するために使用しようとしている次のクエリがあります。ElasticSearch Delete Query - 用語と範囲でフィルタリングする

{ 
    "filter": { 
     "and": [ 
      { 
       "range": { 
        "Time": { 
         "from": "20120101T000000", 
         "to": "20120331T000000" 
        } 
       } 
      }, 
      { 
       "term": { 
        "Source": 1 
       } 
      } 
     ] 
    } 
} 

このクエリに基づいてドキュメントを削除しようとしました。このクエリは、インデックスに対して実行すると結果が正常に返されます。しかし、インデックスに対してdeleteコマンドを実行しようとすると、何も起こりません。

私は間違ったクエリを作成しているかどうかは分かりません。

答えて

10

delete by query APIがおそらくクエリを必要としている間は、フィルタのみを使用しています。あなたは、このようなfiltered queryを使用してクエリにあなたのフィルタを変換することができます:

{ 
    "filtered" : { 
     "query" : { 
      "match_all" : {} 
     }, 
     "filter": { 
      "and": [ 
       { 
        "range": { 
         "Time": { 
          "from": "20120101T000000", 
          "to": "20120331T000000" 
         } 
        } 
       }, 
       { 
        "term": { 
         "Source": 1 
        } 
       } 
      ] 
     } 
    } 
} 

は、そうでなければ、あなたはもうフィルタークエリを必要としないように、bool query 2で必須の句を使用してクエリにあなたのフィルタを変換することができます。とにかく、フィルターの方が速いので、フィルターのアプローチが良いと思います。

+1

フィルタ処理の中で実際には 'query'コンポーネントは必要ないことに注意してください:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

良い点@tmandry – javanna