2016-09-01 1 views
1

quelqu'un peut-il me montrer comment encadrer cet exemple de requête en utilisant ce module dsl python?formation de requête elasticsearch-dsl-py

Je n'ai que quelque chose de similaire pour une partie de la chaîne de requête.

from elasticsearch_dsl import Search, Q, A, query, aggs 
s = Search() 
s.aggs.bucket('2', 'terms', field = 'Subscriber Type', size=5) 

Je ne suis pas sûr de savoir comment la syntaxe est pour le reste de la requête. Toute aide est très appréciée.

La construction de requête requise est ci-dessous.

{ 
    "size": 0, 
    "query": { 
    "filtered": { 
    "query": { 
    "query_string": { 
     "query": "lincoln", 
     "analyze_wildcard": true 
    } 
    }, 
    "filter": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "Start date": { 
       "gte": 936157359664, 
       "lte": 1472701359665, 
       "format": "epoch_millis" 
      } 
      } 
     } 
     ], 
     "must_not": [] 
    } 
    } 
} 
}, 
"aggs": { 
"2": { 
    "terms": { 
    "field": "Subscriber Type", 
    "size": 5, 
    "order": { 
     "_count": "desc" 
    } 
    }, 
    "aggs": { 
    "3": { 
     "terms": { 
     "field": "Start Station", 
     "size": 5, 
     "order": { 
      "_count": "desc" 
     } 
     } 
     } 
    } 
    } 
    } 
    } 

Répondre

4

Cela devrait faire l'affaire:

s = Search() 
s = s.query("query_string", query="lincoln", analyze_wildcard=True) 
s = s.filter("range", **{"Start date": {"gte": 936157359664, "lte": 1472701359665, "format": "epoch_millis"}}) 
s = s[0:0] 
s.aggs.bucket("2", "terms", field="Subscriber Type", size=5)\ 
    .bucket("3", "terms", field="Start Station", size=5) 

Notez que les espaces dans les noms de terrain font des choses un petit peu plus compliqué, sans eux, vous pourriez dire: s.filter("range", start_date={"gte": 936157359664, "lte": 1472701359665, "format": "epoch_millis"}).