сканировать URL-адреса на основе их приоритетов в StormCrawler

Я работаю над краулером на основе проекта StormCrawler. У меня есть требование сканировать URL-адреса в зависимости от их приоритета. Например, у меня есть два типа приоритета: ВЫСОКИЙ, НИЗКИЙ. Я хочу сканировать URL-адреса с ВЫСОКИМ приоритетом как можно скорее, прежде чем URL-адреса с НИЗКИМ приоритетом. Мне нужен метод для решения указанной выше проблемы в поисковом роботе. Как я могу справиться с этим требованием в Apache Storm и StormCrawler?


person aeranginkaman    schedule 19.01.2021    source источник


Ответы (1)


Используя Elasticsearch в качестве бэкэнда, вы можете настроить носики для сортировки URL-адресов в корзине по любому полю, которое вы хотите. Поля сортируются по возрастанию, поэтому вы должны сохранить в метаданных значение 0 для высокого и 1 для низкого и указать имя ключа в conf es.status.bucket .sort.field. (Обратите внимание, что значения HIGH и LOW также будут работать).

Значения по умолчанию в архетип ES

es.status.bucket.sort.field:

  • nextFetchDate
  • url

вы должны сохранить nextFetchDate, чтобы URL-адреса с одинаковым приоритетом сортировались по нему и имели, например,

es.status.bucket.sort.field:

  • metadata.priority
  • nextFetchDate
  • url

Обратите внимание, что это не повлияет на сортировку сегментов, а только на порядок в них.

person Julien Nioche    schedule 19.01.2021
comment
Большое спасибо, мистер Ниоче. Ваш подход действительно интересен. Есть ли способ контролировать порядок обработки кортежей внутри базы краулера в зависимости от их приоритетов? - person aeranginkaman; 20.01.2021
comment
В некоторых ситуациях может быть создано множество кортежей с НИЗКИМ приоритетом, прежде чем мы добавим кортеж с ВЫСОКИМ приоритетом из Spout. - person aeranginkaman; 20.01.2021
comment
Кроме того, мы используем Apache Solr для индексации результатов поискового робота и подачи URL-адресов. Есть ли аналогичный подход для бэкэнда Apache Solr? - person aeranginkaman; 20.01.2021
comment
Я предполагаю, что вы имеете в виду, что LOW и HIGH могут принадлежать одному и тому же хосту и что HIGH застрянет во внутренних очередях сборщика. Если вы уменьшите количество URL-адресов из каждой корзины, это не должно быть проблемой. Вы также можете иметь 2 FetcherBolts и добавить настраиваемый болт для перенаправления кортежей в один или другой в зависимости от их значения приоритета. - person Julien Nioche; 20.01.2021
comment
Модуль SOLR сильно отстает от модуля ES, и пользовательская сортировка в настоящее время недоступна. Это не должно быть слишком сложно для реализации мысли, и это будет ценным вкладом в проект, если вы захотите. - person Julien Nioche; 20.01.2021
comment
Что произойдет, если я добавлю инструкцию query.setSort () в запрос SOLR? - person aeranginkaman; 23.01.2021
comment
Думаю, сортировка в ведре не может решить мою проблему. Потому что он частично сортируется внутри ведра. Но мне нужно передать кортежи в топологию отсортированным способом. - person aeranginkaman; 01.02.2021
comment
Что означает ведро в изливах SOLR или ES? - person aeranginkaman; 03.02.2021