2017-07-03 1 views
0

J'ai les données au format suivant:elasticsearch_dsl: Filtrer par champ imbriqué

{_source:"@fields": { 
      "code": 200, 
      "relativeCreated": 5969784.005880356, 
      "process": 16, 
      "module": "run", 
      "funcName": "main", 
      "threadName": "MainThread", 
      "filename": "run.py", 
      "levelno": 20, 
      "processName": "MainProcess", 
      "lineno": 210, 
      "node": "4", 
      "thread": 19255376, 
      "package": 977, 

     } 
} 

Et ce que je veux faire est de faire un filtre pour obtenir des éléments seulement où paquet est 977. tentais de faire ce qui suit search.filter("term", **{'@fields.package': 937}) Mais cela ne semble pas filtrer quoi que ce soit.

Répondre

0

Si le champ paquet à l'intérieur de @fields est imbriquée alors vous pourriez avoir à utiliser des filtres imbriqués, vérifiez votre carte et confirmer sur le type de champ, pour les filtres imbriqués, vous pouvez la mettre en œuvre ainsi:

search.filter("nested", path = '@fields' filter=F('term', '@fields.package': 937))