2012-09-13 2 views
6

Ho la seguente query che sto cercando di utilizzare per eliminare i dati da un indice ElasticSearch.ElasticSearch Cancella query - Filtro con termine e intervallo

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

Ho provato a eliminare i documenti in base a questa query. Questa query restituisce risultati soddisfacenti quando la eseguo rispetto all'indice. Ma quando provo a eseguire un comando delete sull'indice, non succede nulla.

Non sono sicuro se sto costruendo la query errata o cos'altro.

risposta

10

Si sta utilizzando solo un filtro mentre il delete by query API probabilmente ha bisogno di una query. È possibile convertire il filtro a una query utilizzando un filtered query come questo:

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

altrimenti si potrebbe convertire il vostro filtro a una query utilizzando un bool query con due clausole devono, in modo che non hai bisogno di più di una query filtrata. Ad ogni modo, suppongo che l'approccio del filtro sia migliore dato che i filtri sono più veloci.

+1

Nota che in realtà non è necessario il componente 'query' all'interno del filtro: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

buon punto @tmandry – javanna