Startwith query not working if string has hyphen (-)

That's most likely a question of analyzer.

Have a look at how elasticsearch indexed your document using the _analyze API.
Note that wildcard queries are not analyzed and must exactly match with what you have in the inverted index.

If you don't succeed, please provide a full recreation script as described in About the Elasticsearch category. It will help to better understand what you are doing. Please, try to keep the example as simple as possible.