2012-09-13 10 views
6

Mam następujące zapytanie, które próbuję użyć do usunięcia danych z indeksu ElasticSearch.ElasticSearch Delete Query - Filtr z terminem i zakresem

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

Próbowałem usunąć dokumenty na podstawie tego zapytania. Ta kwerenda zwraca wyniki poprawnie, gdy uruchomię go przeciwko indeks. Ale gdy próbuję uruchomić polecenie delete względem indeksu, nic się nie dzieje.

Nie jestem pewien, czy źle skonstruowałem kwerendę lub co jeszcze.

Odpowiedz

10

Używasz tylko filtra, podczas gdy delete by query API prawdopodobnie potrzebuje zapytania. Można zamienić filtr do zapytania przy użyciu filtered query takiego:

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

przeciwnym razie można zamienić filtr do zapytania przy użyciu bool query z dwoma klauzule muszą tak, że nie trzeba już przefiltrowaną zapytanie. W każdym razie, myślę, że metoda filtrowania jest lepsza, ponieważ filtry są szybsze.

+1

Zauważ, że w rzeczywistości nie potrzebujesz komponentu 'query' w filtrowanym: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html#_filtering_without_a_query – tmandry

+0

good point @tmandry – javanna

Powiązane problemy