Установка CouchDB + Lucene на Windows

Многие уже наверное слышали о популярной парадигме доступа к данным map\reduce. Кто-то даже наверное слышал о Apache CouchDB. Это документ-ориентированная БД с доступом по REST интерфейсу. Авторы позиционируют её как БД созданную для нужд создателей сайтов.

Но вот беда, хоть сама база и отдельно разрабатываемый движок поиска couchdb-lucene являются кроссплатформенными, установить их на windows машину оказалось не так легко. Если у вас есть опыт работы под linux и компиляции Java, то вы наверное и сами быстро справитесь. Если же нет, приглашаю под хабракат.

Установка базы данных


Говоря «установить их» я немного слукавил. Установить саму CouchDB не сложно, благо на сайте есть windows intaller, находится он по этому адресу.

Установка couchdb-lucene


Для чего это нужно? Дело в том, что сама couchDB не поддерживает полнотекстового поиска. Эта задача целиком делегируется внешним приложениям. И правильно, зачем делать то, для чего уже существует Apache Lucene?

Couchdb-lucene это приложение-индексатор, написанное на Java и полностью интегрируемое в базу данных. Интересным фактом является то, что помимо собственно Lucene в индексатор встроена библиотека Apache Tika позволяющая реализовывать полнотекстовый поиск не только по полям документов, но и по бинарным вложениям (Attachments). CouchDB-lucene распространяется через git. Для linux есть простая (всего три пункта) инструкция и несколько необходимых скриптов, для windows же ничего нет.

Итак как же собрать все это воедино под windows:

1. Скачать исходники.

Думаю тут проблем не возникнет. Идем на страницу проекта, жмем download и выбираем zip.

2. Исходники нужно собрать.

Вот тут то и начались проблемы. Дело в том, что лично я никогда раньше не писал на java и тем более не имел дело с её компиляцией. Собирать лучше не на «боевом» сервере. Зачем захламлять его лишним софтом?

2a. Устанавливаем компилятор
Компилятор называется javac и живет он на сайте компании Sun. Туда и отправимся. Нужен нам JDK (Java Development Kit).

2b. Устанавливаем Apache Maven

Уже интереснее. Это фреймворк автоматизирующий сборку проектов. Для нас важен тот факт, что он автоматически скачает все библиотеки, указанные в зависимостях у CouchDB-lucene и соберет проект. Идем на страницу загрузки. И скачиваем apache-maven-x.x.x-bin.zip. На момент написания топика версия 2.2.1
Там же можно найти инструкцию по установке. Приведу вольный перевод основных мыслей:
1. Разархивируйте в произвольную директорию
2. Внесите пути к Maven и компилятору Java в системные переменные.
Для этого нажмте WinKey + Pause (Свойства системы). Для Vista и Seven выберите «Дополнительные параметры системы», Дополнительно, Переменные среды.
Там добавьте в список переменных пользователя:
M2_HOME = C:\путь\к\директории\maven
JAVA_HOME = C:\путь\к\директории\JDK
JRE_HOME = C:\путь\к\директории\JRE
(JRE это ява машина, необходимая для запуска ява приложений, ставится либо автоматически вместе с JDK либо уже давно установлена)
Path = %M2%;%JAVA_HOME%\bin;%JRE_HOME%\bin
3. Проверьте корректность установки набрав в командной строке mvn --version

2c. Собираем

Теперь имея все необходимое открываем окно консоли и идем в директорию куда разархивированы исходники (cd C:\some\dir для тех кто забыл) и запускаем сборку командой mvn. Процесс идет, можем откинуться на спинку кресла.

3. Достаем собранное приложение

В папке исходников появилась директория target. Из неё забираем couchdb-lucene-0.6-SNAPSHOT-dist.zip это и есть то-что нам нужно. Разархивируем на той машине где собираемся запускать базу.

4a. Заменяем скрипт запуска

Скрипт запуска написан на Shell. Нужен аналог на bat. Кладем в bin рядом с файлом run файл run.bat со следующим содержимым

@echo off
setlocal EnableDelayedExpansion 
SET OLDCD=%CD%
cd %~dp0..
SET JAVA_OPTS=-server -Xmx1g
SET CLASS=com.github.rnewson.couchdb.lucene.Main
SET CLASSPATH="conf"
for %%i in ("lib\*.jar") do SET CLASSPATH=!CLASSPATH!;"%%~dpfi"
java.exe %JAVA_OPTS% -cp %CLASSPATH% %CLASS%
cd %OLDCD%


4b. Создаем скрипт запуска обработчика сигналов от БД, написанного на питоне

Дело в том, что CouchDB никак не хотела запустить интерпретатор питона с необходимыми параметрами. Обходным вариантом является создать файл hook.bat со следующим содержимым:

@echo off
C:\путь\к\питону\python.exe "C:\путь\к\скрипту\couchdb-external-hook.py"


5. Для запуска нужен питон

Я не знаю чем руководствовался разработчик, но CouchDB-lucene написана на трех языках: Java, Python и shell. Делать нечего, идем на сайт питона и скачиваем версию 2.7 (на версии 3.2 необходимый скрипт лично у меня не заработал). Здесь также есть инсталлятор. Питон ставим уже на «боевой» сервер.

6. Если на боевом сервере нет Java машины то её нужно поставить.

Если вы собирали приложение на той машине где собираетесь запускать, то java машина у вас уже есть. Скачать её можно тут.

7. Проверяем

Запустите run.bat если увидите что-нибудь похожее на
2010-09-19 23:13:54,781 INFO [Main] Index output goes to: C:\путь\к\приложению\couch-lucene\indexes
2010-09-19 23:13:55,031 INFO [Main] Accepting connections with SelectChannelConnector@localhost:5985
То все идет хорошо.

8. Последний рывок

Настраиваем CouchDB.
[couchdb]
os_process_timeout=60000; increase the timeout from 5 seconds.

[external]
fti=«C:\путь\к\hook.bat»

[httpd_db_handlers]
_fti = {couch_httpd_external, handle_external_req, <<«fti»>>}

9. Не забудьте перезапустить CouchDB

Теперь создав соответствующий _design документ вы можете осуществлять полнотекстовый поиск. О формате _design документа написано на странице проекта в разделе Document Indexing.

Удачного использования!