Ваша проблема не связана с синтаксисом запроса, а для этого нужен экранирование, а с анализом. Ваш анализатор удаляет пунктуацию, потому что он анализирует ее как полный текст. Он удаляет #, почти так же, как удаляет точки и запятые.
Таким образом, после анализа (при условии стандартного анализа) чего-то вроде: «Class is #deprecated» генерируемый поток токенов будет иметь следующие токены: «class», «deprecated» («is» - это стоп-слово). Индексированные формы «#deprecated» и «deprecated» идентичны, поэтому невозможно иметь запрос, который может различать их, так как он в настоящее время индексируется.
Чтобы это исправить, вам придется изменить анализатор . WhitespaceAnalyzer может быть хорошим выбором, и должен решить эту проблему. Однако будьте осторожны, вы не приносите больше вреда, чем пользы. Если вы используете WhitespaceAnalyzer, вам также придется бороться с другой пунктуацией и поиском «предложения»
не нашел бы «совпадение в конце этого предложения» из-за периода. Так что, если вы ищете полный текст, это, безусловно, вызовет гораздо больше проблем, чем решит.
Если вы хотите знать полные правила стандартного анализа, кстати, это реализация UAX # 29 границ слова