The new Weight.matches() API should allow the UnifiedHighlighter to more accurately highlight some BooleanQuery patterns correctly – see
In addition, this API should make the job of highlighting easier, reducing the LOC and related complexities, especially the UH's PhraseHelper. Note: reducing/removing PhraseHelper is not a near-term goal since Weight.matches is experimental and incomplete, and perhaps we'll discover some gaps in flexibility/functionality.
This issue should introduce a new UnifiedHighlighter.HighlightFlag enum option for this method of highlighting. Perhaps call it WEIGHT_MATCHES? Longer term it could go away and it'll be implied if you specify enum values for PHRASES & MULTI_TERM_QUERY?