We just hit this bug as well. To reproduce, you must index a document that contains a hyphen (or underscore) and then search with a misspelled version of the indexed text; e.g.
document contains: mid-term
result: exception thrown
I looked at the code of where this is happening and it seems to be related to token offsets (of the tokenized query) in conjunction with a feature of the spellcheck component called collation. Basically collation tries to replace the original query with the top suggested words. It relies on the tokenizer to remove the original misspelled words and insert the suggested ones (using StringBuilder.replace). Unfortunately the token offsets look weird for words with hyphens (or underscore); for example:
1st token: value = abc; startOffset = 0; endOffset = 7
2nd token: value = def; startOffset = 0; endOffset = 7
Because the two tokens occupy the same range (0-7) this messes up the replacement logic. I'm not sure if this tokenizer behavior is the correct one, but it's part of the problem.
Having said that, I tried to change the spellcheck tokenizer from standard to whitespace and this actually solved the problem; no errors and I get correct suggestions.
So, until this gets fixed you can either:
1) Disable spellchecker collation, or
2) Use a whitespace tokenizer for the spellchecker component