2016-04-12 2 views
1

Ich versuche Folgendes zu tun, aber dies führt zu einer null_pointer_exception.Kombinieren von Bereichs- und Skriptfilter in der Elastiksuche

Was ich erreichen möchte, ist die Ergebnisse zwischen einer Reihe (Standalone das funktioniert) und Filter alle Samstage. Ich habe jedoch versucht, Filter zu kombinieren. Gibt es eine Möglichkeit, diese Filter zu kombinieren, oder sollte ich eine alternative Lösung wählen?

"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"] 
       } 
      } 
     } 
    }, 

Antwort

0

Wenn Ihre Version < 2.x ist. Verwenden Sie bool filter auf mehrere Abfragen zu kombinieren:

{ 
"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 haben in 2.x Version veraltet. Sie können Bool Query verwenden, um dasselbe zu erreichen.

+1

Beachten Sie, dass die [ 'filtered' query] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html) veraltet ist auch . Sie sollten nur alles entfernen und einfach 'bool/filter' verwenden, die' range' und 'script' enthalten. – Val

+0

@Val: Ja, Sie haben Recht.Thnx – Richa

+0

@val können Sie ein Beispiel geben? – michaelmol

0

Wie in meinen Kommentaren zu @ Richas Antwort erwähnt, ist die filtered Abfrage auch deprecated. Sie sollten einfach alles entfernen und einfach bool/filter mit einem range und einem script Filter verwenden.

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

Hat dies für Sie funktioniert? – Val

Verwandte Themen