When is data actually indexed in Elasticsearch?

Once the index (POST) call is made and returns, the document is guaranteed to be searchable from the index. When you query back, there are 2 ways to do it:

curl -XGET localhost:9200/myindex/order/2qLrAfPVQvCRMe7Ku8r0Tw

The above method is realtime, i.e., it will return the doc immediately after the prior POST

curl -XPOST localhost:9200/myindex/order/_search

The above method is near-realtime, i.e., it will return the doc approximately 1 second after the prior POST command. The 1 second "delay" is a called a refresh interval that can be configured per index. The default refresh interval for any index is 1 second, meaning when you run _search, documents will be included in the results 1 second after the POST command returned successfully.

If you want to refresh immediately after a document is indexed, you may also do something like (it will be a little less efficient, but it will be realtime for a succeeding _search):

curl -XPOST 'http://localhost:9200/myindex/order/2qLrAfPVQvCRMe7Ku8r0Tw?refresh=true'