#web-crawler #stormcrawler
#веб-сканер #stormcrawler
Вопрос:
Я работаю над искателем, основанным на проекте StormCrawler. У меня есть требование сканировать URL-адреса на основе их приоритетов. Например, у меня есть два типа приоритета: ВЫСОКИЙ, НИЗКИЙ. Я хочу сканировать URL-адреса с высоким приоритетом как можно скорее перед URL-адресами с низким приоритетом. Мне нужен метод для решения вышеуказанной проблемы в искателе. Как я могу выполнить это требование в Apache Storm и StormCrawler?
Ответ №1:
Используя Elasticsearch в качестве серверной части, вы можете настроить spouts для сортировки URL-адресов в корзине по любому нужному полю. Поля сортируются в порядке возрастания, поэтому вы должны сохранить значение в метаданных 0 для high и 1 для low и указать имя ключа в conf es.status.bucket.sort.field. (Обратите внимание, что значения HIGH и LOW as также будут работать).
Значения по умолчанию в архетипе ES
es.status.bucket.sort.field:
- «nextFetchDate»
- «url»
вы должны сохранить nextFetchDate, чтобы URL-адреса с одинаковым приоритетом сортировались по нему и имели, например
es.status.bucket.sort.field:
- «metadata.priority»
- «nextFetchDate»
- «url»
Обратите внимание, что это не повлияет на то, как сортируются сегменты, только на порядок внутри них.
Комментарии:
1. Большое вам спасибо, мистер Ниош. Ваш подход действительно интересен. Есть ли какой-либо способ контролировать порядок обработки кортежей внутри базы обходчика в зависимости от их приоритетов?
2. В некоторых ситуациях, возможно, было отправлено много кортежей с низким приоритетом, прежде чем мы добавили кортеж с высоким приоритетом из Spout.
3. Кроме того, мы используем Apache Solr для индексации результатов поиска и отправки URL-адресов. Существует ли аналогичный подход для серверной части Apache Solr?
4. Я предполагаю, что вы имеете в виду, что LOW и HIGH могут принадлежать одному и тому же хосту, а HIGH застрянет во внутренних очередях fetcher. Если вы сохраняете количество URL-адресов из каждой корзины на низком уровне, это не должно быть проблемой. У вас также может быть 2 FetcherBolts и добавить пользовательский bolt для перенаправления кортежей на один или другой в зависимости от их значения приоритета.
5. Модуль SOLR сильно отстает от ES, и пользовательская сортировка в настоящее время недоступна. Это не должно быть слишком сложно реализовать, и это будет ценным вкладом в проект, если вам захочется.