First, check to see if there really are any problems with the fragments themselves. cd to the yout /usr/share/elasticsearch/lib directory or its equivalent, and use Lucene CheckIndex as follows:
java -cp "*" -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER/index/
This will check the shard for problems and take some time if your shards are large.
Remember that if you make a mistake in the Java classpath, some necessary jar files will be missing, and CheckIndex may mistakenly declare that all segments in the fragment are broken, so read the output carefully.
If there are problems with a shard, and you have no other way to restore it, running the same command with the -fix argument will correct the shard , but you will lose data . CheckIndex will warn you how many documents (if any) you will lose from the shard.
If CheckIndex reports that everything is fine with the shard, then I hope your problem is only with the broadcast. A transaction log is a logbook that ElasticSearch uses for atomicity. After the crash, ES will try to recover the fragment, including records that have not yet been reset to the fragment index itself. They are in the translator, so you will lose them if you delete it . This, however, is much better than losing a shard. In your case, the translation already seems damaged, and I do not know how to restore it.
To remove the damaged transaction log used for recovery, simply delete the translation by deleting the translation files in /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER>/translog/ for each corresponding fragment for each affected node . The last part is important because you can see the cluster trying to regenerate the translation fragment from another node after removing it from one.
The fragments must be correctly initialized, although usually, as usual, it may take some time.