There are two in-memory buffers. The Elasticsearch indexing buffer can hold JSON documents and is aware of Elasticsearch features, like the transaction log. Lucene keeps an internal buffer for Lucene documents. This buffer works "below" Elasticsearch API, on each shard.
Yes, that is my knowledge.
Yes, the results are appended to the current segment, if possible, or a new segment is created.
Exactly. And the transaction log is cleared. See also
The action of performing a commit and truncating the translog is known in Elasticsearch as a flush.
Yes. An Elasticsearch flush() is more complex.
For example, Lucene IndexWriter flush() will be executed when executing an Elasticsearch forceMerge() https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html So the wording is a little bit confusing.
Also commit() is a bit different. It was one of the difficulties for me to understand why there is no such thing as a commit() API method in Elasticsearch which would trigger Lucene commit() and nothing more. There are Elasticsearch commit points, but they are in the transaction log.
There is also some light interaction between Elasticsearch and Lucene. Lucene can write end-to-end CRC-32 checksums in segments https://issues.apache.org/jira/browse/LUCENE-5925 These are used in Elasticsearch to help the validation of an index while recovering https://github.com/elastic/elasticsearch/issues/8403