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