2012-09-13 29 views
6

Tengo la siguiente consulta que estoy tratando de usar para eliminar datos de un índice ElasticSearch.ElasticSearch Eliminar consulta - Filtrar con término y rango

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

He intentado eliminar documentos basados ​​en esta consulta. Esta consulta devuelve resultados finos cuando la ejecuto contra el índice. Pero cuando intento ejecutar un comando de eliminación contra el índice, no ocurre nada.

No estoy seguro de si estoy construyendo incorrectamente la consulta o qué más.

Respuesta

10

Está utilizando solo un filtro, mientras que el delete by query API probablemente necesite una consulta. Puede convertir su filtro a una consulta mediante un filtered query así:

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

de lo contrario podría convertir su filtro a una consulta utilizando un bool query con dos cláusulas del mosto, de modo que usted no necesita una consulta filtrada más. De todos modos, creo que el enfoque de filtro es mejor ya que los filtros son más rápidos.

+1

Tenga en cuenta que en realidad no necesita el componente 'query' dentro de filtrado: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

buen punto @tmandry – javanna

Cuestiones relacionadas