Over the last few years I have done a lot of development against Elasticsearch, especially using the Ruby libraries. The Elasticsearch::DSL is very powerful, but anything beyond a simple query can take hours of debugging to get the syntax just right. I always learn the hard way that it is better to handcraft the JSON first to get the logic correct, and then translate it to the Ruby DSL code.
I don’t do it often enough to remember, so after my latest struggle with ES, I thought it useful to document.
The curl command is:
curl -X POST localhost:9200/myindex/_search \ -H 'Content-Type: application/json' -s \ -d '@q-test.json' | json_xs | jq .hits.total
q-test.json is a file with the DSL JSON.