#solr #design-patterns #nutch
#solr #шаблоны проектирования #nutch
Вопрос:
Я сканирую наши большие веб-сайты с помощью nutch, а затем индексирую с помощью solr, и результаты довольно хорошие. Однако на сайте существует несколько структур меню, которые индексируют и портят результаты запроса.
Каждое из этих меню четко определено в DIV so <div id="RHBOX"> ... </div> or <div id="calendar"> ...</div>
и нескольких других.
В какой-то момент мне нужно удалить содержимое этих разделов.
Я предполагаю, что правильное место находится во время индексации с помощью solr, но не могу понять как.
Шаблон будет выглядеть примерно так (<div id="calendar">).*?(</div>)
, но я не могу заставить его работать <tokenizer class="solr.PatternTokenizerFactory" pattern="(<div id="calendar">).*?(</div>)" />
, и я не совсем уверен, куда его поместить schema.xml .
Когда я помещаю этот шаблон в schema.xml не выполняется синтаксический анализ.
Ответ №1:
Вот исправление для SOLR, которое вы можете поместить в свою конфигурацию индексирования, чтобы игнорировать содержимое настраиваемых вами тегов. Однако это будет работать только с XML, поэтому, если вы можете привести в порядок свой HTML или вы знаете, что это XHTML, тогда это сработало бы, но это не сработает с любым случайным HTML.
Ответ №2:
Я думаю, у вас есть несколько вариантов:
- расширьте анализатор HTML Nutch и добавьте логику для удаления заголовка. (Для этого могут быть лучшие места, например, когда у вас есть необработанные данные, но до анализа DOM)
- сделайте ваш сайт достаточно умным, чтобы не рисовать заголовок при обходе nutch. Это довольно легко сделать, просто проверив значение User-Agent в заголовке запроса. Возможно, вам потребуется улучшить заполнение вашего обхода, поскольку ссылки в заголовке не помогут nutch находить другие страницы
- Каким-то образом заставьте Solr удалить заголовок для данных nutch. Я не уверен, как вы это сделаете, и я думаю, что это означает, что вы теряете часть синергии Nutch / Solr.
- Каким-то образом отредактируйте индекс Nutch (просто индекс lucene). Теоретически, вы могли бы просто просмотреть все документы в индексе и выполнить обрезку правильного свойства каждого документа.
Я бы подумал, что самый простой способ сделать это — выполнить # 2, если у вас есть согласованный способ рисования заголовка (т. Е. Обложка или общее включение). Тогда, возможно, # 1 и # 4. Я думаю, что # 3 было бы самым сложным, но я могу ошибаться.
Ответ №3:
В Nutch 1.12 была введена новая функция с использованием синтаксического анализатора apache tika, который работает по алгоритму boilerpipe для удаления содержимого верхнего и нижнего колонтитулов с html-страниц на самой стадии синтаксического анализа.
Мы можем использовать следующие свойства в nutch-site.xml чтобы это было реализовано :
<!-- parse-tika plugin properties -->
<property>
<name>tika.extractor</name>
<value>boilerpipe</value>
<description>
Which text extraction algorithm to use. Valid values are: boilerpipe or none.
</description>
</property>
<property>
<name>tika.extractor.boilerpipe.algorithm</name>
<value>DefaultExtractor</value>
<description>
Which Boilerpipe algorithm to use. Valid values are: DefaultExtractor, ArticleExtractor
or CanolaExtractor.
</description>
</property>
У меня это работает. Надеюсь, это сработает и для других …:)
Для получения подробного обзора вы можете обратиться к этому тикету : https://issues.apache.org/jira/browse/NUTCH-961
Ответ №4:
Если вы хотите это сделать, я полагаю, вам следует написать настраиваемый синтаксический анализатор в nutch, такой, чтобы индексируемые данные не содержали данных. По сути, после синтаксического анализа текстовые данные представляют собой необработанный текст без какой-либо структуры.
Комментарии:
1. Это неверно. Solr анализирует необработанный HTML, который был просмотрен nutch. Nutch также преобразует его в свой собственный индекс.
2. Это не совсем так. Solr анализирует объекты документа Lucene, созданные nutch. Часть данных — это необработанный HTML, но есть и другие свойства, такие как title и ContentType, которые nutch передает Solr. Solr не анализирует его.