Как остановить стандартный анализатор Lucene, удаляющий специальные символы

У меня возникли проблемы с Lucene, и я буду признателен за любую помощь.

У меня есть собственный запрос, который написан и проанализирован вручную (этот запрос) с помощью QueryParser.Parse. Я использую версию LUCENE_29 и StandardAnalyzer.

В моем запросе у меня есть специальный символ (двоеточие), и мне нужно, чтобы он оставался:

+(Name:"test\:word" OR Business:"test\:word hello")

Результат после анализа текста запроса выше:

+(Name:"test word" OR Business:"test word hello")

Есть ли у кого-нибудь предложения, я попытался передать пустую коллекцию стоп-слов конструктору StandardAnalyzer, но это не повлияло на то, что он по-прежнему удаляет двоеточие.

Спасибо.


person Mr Sheriff    schedule 12.09.2017    source источник
comment
Вы задаете хороший вопрос. У меня была аналогичная проблема с Lucene, и я не нашел способа решить эту проблему. Lucene был удален с нашего веб-сайта частично из-за этой проблемы.   -  person JohnH    schedule 12.09.2017
comment
@JohnH спасибо, что поделились этой информацией!   -  person Mr Sheriff    schedule 12.09.2017
comment
К вашему сведению - LUCENE_29 сообщает нам только установленную вами совместимость версий, но не сообщает нам, какую версию lucene или lucene.net вы используете.   -  person NightOwl888    schedule 13.09.2017


Ответы (1)


Вы не можете. StandardAnalyzer был специально разработан для удаления специальных символов.

Ответ - использовать реализацию Analyzer, которая не удаляет специальные символы (например, WhiteSpaceAnalyzer), или создать собственный анализатор на основе существующих токенизаторов и фильтров в соответствии с вашими потребностями.

Обратите внимание, что вам нужно будет использовать WhiteSpaceAnalyzer для индексации ваших данных с этими специальными символами, иначе они не будут доступны во время запроса.

person NightOwl888    schedule 12.09.2017
comment
Привет, я использовал WhiteSpaceAnalyer, и при использовании query.parse он дает: + (Name: test: word Name: test: word hello) - этот запрос работает, но я не понимаю, почему WhiteSpaceAnalyzer удаляет кавычки из поле имени, но оставив их в поле Бизнес. Любые идеи? - person Mr Sheriff; 13.09.2017
comment
Вы использовали WhiteSpaceAnalyzer во время индексации? Проанализированные данные необходимо записать в индекс со специальными символами, иначе они не будут доступны во время запроса. - person NightOwl888; 13.09.2017