Hi Martijn,
Thanks for the reply. You are right, the issue is i used dynamic template and "body" field is an object, so at the time the percolator query "body.*" is indexed, the field "body.en" doesn’t exist yet.
To fix the issue I indexed a fake document which contains all possible languages in the body, e.g body.en, body.fr, body.de etc.... before indexing percolator query "body.*" then delete this document afterward.