Поиск на основе Nutch и Solr, быстрый старт. Часть первая, настройка под Linux
Invite pending
Не так давно, сугубо в образовательных целях, решил изучить задачу организации поиска. После прочтения нескольких статей на хабре и более детального поиска в интернете, было решено использовать Apache Solr в качестве поискового движка и Apache Nutch в качестве краулера. В качестве контейнера для Solr был выбран Apache Tomcat.
Разворачивал все компоненты дважды, на Linux и на Windows, но об этом чуть позже, как оказалось там есть интересные особенности.
Начнем с настройки компонент на Linux. Открываем стандартный терминал или вашу любимую консоль, в моем случае это yakuake, копируем в каталог /opt скачанные с официальных сайтов solr lucene.apache.org/solr/downloads.html, рекомендую версию 4.1, она поновее, да и интерфейс админской части на много приятнее, чем в версии 3.6.2, и nutch www.apache.org/dyn/closer.cgi/nutch, я использовал версию 1.6. Для удобства папки были названы tomcat, solr и nutch соответственно. После сем трем папкам рекурсивно были установлены permission'ы на все что только можно. Если кто не в курсе:
Разворачивал все компоненты дважды, на Linux и на Windows, но об этом чуть позже, как оказалось там есть интересные особенности.
Настройка nutch
Начнем с настройки компонент на Linux. Открываем стандартный терминал или вашу любимую консоль, в моем случае это yakuake, копируем в каталог /opt скачанные с официальных сайтов solr lucene.apache.org/solr/downloads.html, рекомендую версию 4.1, она поновее, да и интерфейс админской части на много приятнее, чем в версии 3.6.2, и nutch www.apache.org/dyn/closer.cgi/nutch, я использовал версию 1.6. Для удобства папки были названы tomcat, solr и nutch соответственно. После сем трем папкам рекурсивно были установлены permission'ы на все что только можно. Если кто не в курсе:
sudo chmod -R 777 .
Далее нужно попробовать раскраулить хоть какой-нибудь сайт, чтобы в нашем nutch появились данные по которым мы планируем организовать поиск. Для этого следует изучить руководство отсюда http://wiki.apache.org/nutch/NutchTutorial. Я не буду полностью описывать, что я делал при настройке nutch, просто скажу, что нужно внимательно сделать шаг за шагом все как в туториале. Единственный нюанс, нужно чтобы переменная окружения JAVA_HOME у вас была установлена.
После создания папки urls, создаем в ней файл seed.txt. И прописываем в нем, по принципу одна строчка – один URL, те URL по которым будем краулить. После этого идем в папочку /conf/ и редактируем там файл regex-urlfilter.txt, в самый конец файла дописываем адреса из seed.txt по следующему щаблону: +^http://([a-z0-9]*\.)*nutch.apache.org/
, и обязательно в одной строчке только один url. Далее редактируем файл nutch-site.xml так как показано в вышеупомянутом туториале.
После этих манипуляций nutch для Linux у нас готов к использованию через консоль. Проверяем запустив в папке /opt/nutch следующую команду: bin/nutch crawl urls -dir crawl -depth 3 -topN 5, подробное описание параметров есть в том же туториале.
Если никаких сообщений об ошибках на вашей консоли нет и вы видете сообщение INFO: crawl finished: crawl, то мои поздравления, вы раскраулили содержимое сайтов из списка в файле seed.txt. Если возникли проблемы связанные с hadoop, то можно попробовать в папке /nutch/lib заменить библеотеку hadoop-core-1.x на hadoop-core-0.20.2, мне помогло. Предварительно рекомендую после всех манипуляций еще раз выставить полные права на папку nutch и все ее содержимое дабы не было проблем.
Настройка solr
Теперь нам нужно настроить solr и проиндексировать раскрауленные данные, чтобы по ним организовать поиск. Для начала проверьте, запущен ли у вас tomcat, если не запущен, то запустите. Слава богу у solr тоже есть общирный и весьма информативный вики, для любознательных ссылка wiki.apache.org/solr, там можно найти все что угодно и даже больше, чем нужно. Но мне нужно было разобраться довольно быстро, поэтому я воспользовался статьей отсюда blog.building-blocks.com/building-a-search-engine-with-nutch-and-solr-in-10-minutes. За не большими исключениями там все тоже хорошо работает.
Теперь об исключениях. Я все оставлял по дефолту, поэтому редактировал файлы в папке /solr/example/solr/collection/conf. Во всех полях, которые мы добавили в файл schema.xml нужно вместо type=”text” прописать type=”text_general” и заодно, если вы собираетесь копировать список полей из вышеупомянутой статьи, то удалите из скопированного текста строку с полем <field name=”url”. Прописываем в этом же файле url. Свой requestHandler я не описывал, обошелся дефолтными.
Проверяем работу solr: запускаем из папки /solr/example/ start.jar, после запуска пробуем в браузере перейти по адресу http://localhost:8983/solr
, если видим админскую часть solr, то все хорошо. После этого идем в папку /opt/nutch/ и запускаем команду bin/nutch solrindex http://127.0.0.1:8983/solr/
crawl/crawldb crawl/linkdb crawl/segments. Если никаких сообщений об ошибках вы на консоли не видите, то поздравляю, мы проиндекировали раскрауленные данные и теперь можем попробовать по ним что-нибудь найти.
Идем в админку solr по адресу http://localhost:8983/solr/
, далее переходим ко вкладке collection1, она расположена на панели слева, в появившемся меню выбираем владку Query. Для проверки просто нажмем кнопку Execute Query, результатом должны быть все проиндексированные xml-документы.
На этом пожалуй все, в следующей статье, если будет положительная реакция, расскажу как сделать примерно это же, но под Windows. Жду с нетерпением ваших комментариев и советов.