2017-04-17 3 views
0

Ich habe Probleme mit der Migration von elastischer Suche 1.5 zu 5.1. Es folgt meine Elasticsearch - 1.5 Abfrage:Aggregation, Abfragekontext und Filter Kontext funktioniert nicht in Elasticsearch 5.1

{ 
    "_source":["_id","spotlight"], 
    "query":{ 
     "filtered":{ 
      "filter":{ 
       "and":[ 
        {"term":{"gender":"female"}}, 
        {"range":{"lastlogindate":{"gte":"2016-10-19 12:39:57"}}} 
       ] 
      } 
     } 
    }, 
    "filter":{ 
     "and":[ 
      {"term":{"maritalstatus":"1"}} 
     ] 
    }, 
    "sort":[{"member2_dummy7":{"order":"desc"}}], 
    "size":"0", 
    "aggs": { 

     "maritalstatus": { 

      "filter": {}, 
      "aggs" : { 

       "filtered_maritalstatus": {"terms":{"field":"maritalstatus","size":5000}} 
      } 
     } 
    } 
} 

Diese Abfrage mich richtig doc_count in Aggregationen gibt. Dieser doc_count wird über die vom Abfragekontext zurückgegebene Ergebnismenge berechnet und ignoriert den Filterkontext.

Ich habe 5.1 in Elasticsearch gleiche Abfrage geschrieben:

{ 
    "_source":["_id","spotlight"], 
    "query":{ 
     "bool":{ 
      "must":[ 
       {"term":{"gender":"female"}}, 
       {"range":{"lastlogindate":{"gte":"2016-10-19 12:39:57"}}} 
      ], 
      "filter":{ 
       "bool":{ 
        "must":[ 
         {"term":{"maritalstatus":"1"}} 
        ] 
       } 
      } 
     } 
    }, 
    "sort":[{"member2_dummy7":{"order":"DESC"}}], 
    "size":"0", 
    "aggs": { 

     "maritalstatus": { 

      "filter": {}, 
      "aggs" : { 

       "filtered_maritalstatus": {"terms":{"field":"maritalstatus","size":5000}} 
      } 
     } 
    } 

} 

Aber in Elasticsearch 5.1, es ist mir falsch doc_count in Aggregation zurück. Ich denke, es nimmt Filter im Abfragekontext und folglich gibt es falsches doc_cout zurück. Kann mir jemand sagen, wie man Abfrage und Filter in der elastischen Suche 5.1 richtig trennt?

+0

Überprüfen Sie zuerst Begriff Abfrage, die Sie suchen 'weiblich 'und in 5.1 hast du nach' Female' gesucht. Es spielt eine große Rolle in der Term-Abfrage. Ändern Sie also Ihre Termabfrage in '5.1' von' Female' nach 'female' und überprüfen Sie die Ergebnisse. Sehen Sie sich auch den Zeitstempel an. Die Abfrage in '5.1' ist 5 Sekunden größer als die Abfrage in 1.5. – avr

Antwort

2

Ihre 1.5-Abfrage verwendet post_filter, die Sie in Ihrer 5.1-Abfrage entfernt haben.

Die äquivalente Abfrage in ES 5.1 ist die folgende (filtered/filter einfach als bool/filter und die Top-Level-filter umbenannt post_filter ersetzt wird):

in 1,5
{ 
    "_source": [ 
    "_id", 
    "spotlight" 
    ], 
    "query": { 
    "bool": { 
     "filter": [ 
     { 
      "term": { 
      "gender": "female" 
      } 
     }, 
     { 
      "range": { 
      "lastlogindate": { 
       "gte": "2016-10-19 12:39:57" 
      } 
      } 
     } 
     ] 
    } 
    }, 
    "post_filter": { 
    "term": { 
     "maritalstatus": "1" 
    } 
    }, 
    "sort": [ 
    { 
     "member2_dummy7": { 
     "order": "desc" 
     } 
    } 
    ], 
    "size": "0", 
    "aggs": { 
    "maritalstatus": { 
     "filter": {}, 
     "aggs": { 
     "filtered_maritalstatus": { 
      "terms": { 
      "field": "maritalstatus", 
      "size": 5000 
      } 
     } 
     } 
    } 
    } 
} 
+0

Danke Val .. Das hat für mich funktioniert. –

+0

Froh, dass es geholfen hat! – Val

+0

Fühlen Sie sich frei zu akzeptieren, wenn es geholfen hat ;-) – Val

Verwandte Themen