Индексирование документов уценки для полнотекстового поиска в Apache SOLR - PullRequest
0 голосов
/ 30 сентября 2018

Я использую Apache SOLR для индексации документов уценки.Как вы знаете, Markdown представляет собой обычный текст со специальными тегами для форматирования, например, жирным шрифтом и курсивом.Проблема заключается в следующем: если уценка имеет жирный или курсивный формат, полнотекстовый поиск не работает.Однако, если документ уценки не имеет элементов форматирования (полужирный, курсив или заголовок, ссылки и т. Д.) - работает полнотекстовый поиск.Подводя итог, это работает, когда документ уценки совпадает с обычным текстом (т. Е. Ни одно слово не имеет никакого форматирования уценки).

Я пришел к выводу, что мне нужно преобразовать уценку в открытый текст перед индексацией документов.Только тогда полнотекстовый поиск будет работать как положено во всех случаях.Я занимался поиском и чтением на разных онлайн-форумах.Я думаю, что мне нужно реализовать собственный анализатор.Пользовательский анализатор должен сначала преобразовать уценку в открытый текст, а затем проиндексировать ее.Я думаю, что эта ситуация похожа на то, что Apache Tika делает для документов Microsoft.Он анализирует документы MS Office и извлекает простой текст.Я думаю, что мне нужно подобное.Я думаю, что для документов уценки тоже - мне нужно разобрать и преобразовать в простой текст.Я уже нашел способ конвертировать уценку в открытый текст.

Однако я не уверен, действительно ли мне нужно создавать собственный анализатор.Я прочитал некоторый код для пользовательских анализаторов - но все они используют tokenFilters.Насколько я понимаю, tokenFilters работают в потоке на основе токена.В моем случае весь markdown корпус должен быть преобразован в plain text.Поэтому, пожалуйста, предложите подход для этого.Другой подход, который я обдумал, - сначала преобразовать уценку в открытый текст, а затем сохранить открытый текст вместе с уценкой на диск.Но я хочу избежать этого и справиться с этим в SOLR.Я ожидаю, что SOLR преобразует его в обычный текст, а затем индексирует его.

  1. Должен ли я создавать custom analyzer для сохранения markdown документов в plain text?Или custom query parser требуется?
  2. Может ли кто-нибудь привести пример кода для того же (псевдокод тоже подойдет).

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 01 октября 2018

Используйте StandardTokenizer - он будет разбит на большинство нечисловых символов, что должно подходить для индексации Markdown в виде отдельных терминов, а не с сохранением синтаксиса Markdown.

Этот токенайзер разбивает текстовое поле на токены, обрабатывая пробел и пунктуацию как разделители.Символы-разделители отбрасываются, за исключением следующих случаев:

Точки (точки), за которыми не следует пробел, сохраняются как часть токена, включая имена доменов в Интернете.

Символ "@"входит в число знаков препинания, разделяющих токены, поэтому адреса электронной почты не сохраняются как одиночные токены.

Если вы также хотите разделить точки по словам, вы можете использовать PatternReplaceCharFilterFactory вставить пробел после слов, разделенных точкой без пробелов.

...