Я использую Apache SOLR для индексации документов с уценкой.
Как вы знаете, Markdown - это в основном простой текст со специальными тегами для форматирования, такими как полужирный и курсив. Проблема в том, что если у Markdown выделено жирным шрифтом или курсивом, полнотекстовый поиск не работает. Однако, если в документе с уценкой нет элементов форматирования (жирный шрифт, курсив или заголовок, ссылки и т. Д.) - работает полнотекстовый поиск. Подводя итог, это работает, когда документ уценки такой же, как и обычный текст (т.е. ни одно слово не имеет форматирования уценки).
Я пришел к выводу, что мне нужно преобразовать уценку в открытый текст перед индексированием документов. Только тогда полнотекстовый поиск будет работать должным образом во всех случаях.
Я искал и читал на разных форумах в Интернете. Думаю, мне нужно реализовать собственный анализатор. Пользовательскому анализатору необходимо сначала преобразовать разметку в открытый текст, а затем проиндексировать ее. Я думаю, что эта ситуация похожа на то, что Apache Tika
делает для документов Microsoft. Он анализирует офисные документы MS и извлекает простой текст. Думаю, мне нужно подобное.
Я думаю и о документах с уценкой - мне нужно проанализировать и преобразовать в простой текст.
Я уже нашел способ преобразовать разметку в открытый текст.
Однако я не уверен, действительно ли мне нужно создавать собственный анализатор. Я читал код для пользовательских анализаторов - но все они используют tokenFilters
. Насколько я понимаю, tokenFilters
работают с потоком по токенам. В моем случае весь markdown
корпус нужно преобразовать в plain text
. Итак, пожалуйста, предложите подход к этому.
Другой подход, о котором я подумал, - это сначала преобразовать разметку в открытый текст, а затем сохранить открытый текст вместе с разметкой на диск. Но я хочу избежать этого и справиться с этим в SOLR. Я ожидаю, что SOLR преобразует его в обычный текст, а затем проиндексирует.
- Должен ли я создавать
custom analyzer
для сохраненияmarkdown
документов вplain text
? Или требуетсяcustom query parser
? - Может ли кто-нибудь дать пример кода для того же (псевдокод тоже подойдет).
Пожалуйста помоги.
WhiteSpaceAnalyzer
.WhiteSpaceAnalyzer
был просто токенизирован на основе пробелов, но не на специальных символах, таких как * или ## в уценке. Я вижу, что для моего варианта использования -StandardTokenizerFactory
идеально - поскольку токенизатор будет разбивать пробелы, а также не буквенно-цифровые символы, как упомянуто вами. Я внес это изменение - теперь поиск работает, как ожидалось. - person Chetan Yewale   schedule 01.10.2018