Запуск Solr с Maven
Solr — это поисковый сервер с открытым исходным кодом, созданный с использованием возможностей индексации и поиска Lucene Core , и его можно использовать для реализации масштабируемых поисковых систем практически с любым языком программирования.
Хотя у Solr есть много преимуществ, настройка среды разработки не входит в их число. Эта запись блога описывает, как мы можем запустить Solr с помощью Maven и убедиться, что каждый разработчик использует одну и ту же конфигурацию, схему и версию Solr.
Требования нашей сборки Maven следующие:
- Свойства нашей сборки Maven должны быть прочитаны из внешнего файла свойств. Единственное исключение из этого правила заключается в том, что номера версий зависимостей объявлены в нашем файле POM.
- Процесс сборки должен копировать файлы конфигурации Solr в правильный каталог при запуске нашего экземпляра Solr.
- Процесс сборки должен очистить файлы конфигурации, когда разработчик выполняет команду mvn clean из командной строки.
- Должно быть возможно запустить наш экземпляр Solr с помощью плагина Jetty Maven.
Мы можем выполнить эти требования, выполнив следующие действия:
- Создайте файл POM.
- Получите необходимые зависимости.
- Получите файлы конфигурации Solr.
- Создайте файл свойств, содержащий свойства, используемые в нашей сборке Maven.
- Отредактируйте файл solr.xml .
- Настройте плагин свойств Maven.
- Настройте плагин Copy Maven.
- Настройте плагин Jetty Maven.
Эти шаги описаны более подробно ниже.
Создание файла POM
Сначала нам нужно создать файл POM для проекта веб-приложения. Скелет нашего файла POM выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <modelVersion>4.0.0</modelVersion> <groupId>net.petrikainulainen.maven</groupId> <artifactId>running-solr-with-maven</artifactId> <packaging>war</packaging> <version>0.1</version> <profiles> <!-- Add profile configuration here --> </profiles> <dependencies> <!-- Add dependencies here --> </dependencies> <build> <finalName>solr</finalName> <!-- Add filter configuration here --> <!-- Add resources configuration here --> <plugins> <!-- Add plugin configuration here --> </plugins> </build></project> |
Получение требуемых зависимостей
Единственная зависимость, которая нам нужна, это Solr 4.1.0 (война). Другими словами, единственное, что нам нужно сделать, это добавить следующее объявление зависимости в раздел зависимостей нашего файла POM:
|
1
2
3
4
5
6
|
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr</artifactId> <version>4.1.0</version> <type>war</type></dependency> |
Получение файлов конфигурации Solr
Мы можем получить файлы конфигурации Solr, выполнив следующие действия:
- Загрузите бинарный дистрибутив Solr 4.1.0 .
- Распакуйте загруженный пакет в нужный каталог.
- Перейдите в корневой каталог распакованного бинарного дистрибутива Solr.
- Скопируйте следующие файлы из каталога example / solr / collection1 / conf в каталог src / main / config : admin-extra.html, admin-extra-menu.menu-bottom.html, admin-extra.menu-top.hml , currency.xml, elevate.xml, mapping-FoldToASCII.txt, mapping-ISOLatin1Accent.txt, protwords.xml, schema.xml, solrconfig.xml, spellings.txt, stopwords.txt, synonyms.txt и update-script.js ,
- Скопируйте файлы конфигурации для конкретного языка, найденные в каталоге example / solr / collection1 / conf / lang, в директорию src / main / config / lang .
- Скопируйте макросы Velocity и другие файлы, найденные из каталога example / solr / collection1 / conf / speed, в директорию src / main / config / speed.
- Скопируйте таблицы стилей XSL, найденные из каталога example / solr / collection1 / conf / xslt, в директорию src / main / config / xslt .
- Скопируйте файл solr.xml из каталога exaple / solr / collection1 в каталог src / main / resources .
- Создайте каталог src / main / webapp / WEB-INF . Этот каталог необходим для запуска экземпляра Solr.
Теперь мы успешно получили необходимые файлы и готовы перейти к следующему этапу.
Создание файла свойств
Нашим следующим будет создание файла свойств, который используется в нашей сборке Maven, и добавление необходимой конфигурации профиля сборки в наш файл POM. Пойдем дальше и узнаем, как это делается.
Сначала мы создадим файл свойств, который используется в нашей сборке Maven. Мы можем сделать это, выполнив следующие действия:
- Создайте каталог с профилями / dev в корневом каталоге нашего проекта Maven.
- Создайте файл свойств config.properties в каталоге profile / dev .
Наш файл свойств имеет три свойства, которые описаны ниже:
- Свойство solr.detault.core.directory указывает значение основного каталога по умолчанию. Это каталог, который создается в домашнем каталоге нашего экземпляра Solr. В этом каталоге хранится конфигурация нашего экземпляра Solr и его данные.
- Свойство solr.default.core.name содержит имя ядра по умолчанию.
- Свойство solr.solr.home указывает домашний каталог нашей установки Solr.
Содержимое файла config.properties выглядит следующим образом:
|
1
2
3
4
5
6
7
8
9
|
#SOLR PROPERTIES#Configures the directory used to store the data and configuration of the Solr default coresolr.default.core.directory=todo#Configures the name of the Solr default core.solr.default.core.name=todo#SYSTEM PROPERTIES#Configures the home directory of Solr. Set the preferred directory path here.solr.solr.home= |
Во-вторых, мы должны сконфигурировать профили сборки нашей сборки Maven и использовать фильтрацию для замены вместо переменных, включенных в наши ресурсы. Мы можем сделать это, выполнив следующие действия:
- Создайте отдельный профиль с именем dev и убедитесь, что это профиль по умолчанию для нашей сборки.
- Объявите свойство с именем build.profile.id и установите его значение равным «dev».
- Создайте фильтр, который считывает специфический для профиля файл конфигурации и заменяет переменные, найденные в наших ресурсах, фактическими значениями свойств.
Мы можем завершить шаги один и два, добавив следующее объявление профиля в наш файл POM:
|
1
2
3
4
5
6
7
8
9
|
<profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <build.profile.id>dev</build.profile.id> </properties></profile> |
Мы можем завершить третий шаг, добавив следующий XML-код в раздел сборки нашего файла POM:
|
1
2
3
4
5
6
7
8
9
|
<filters> <filter>${project.basedir}/profiles/${build.profile.id}/config.properties</filter></filters><resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> </resource></resources> |
Редактирование файла solr.xml
Поскольку для настройки имени и каталога экземпляра ядра по умолчанию Solr мы используем специальный файл конфигурации профиля, мы должны внести изменения в файл solr.xml . Эти изменения описаны ниже:
- Значение свойства solr.default.core.name должно быть установлено в качестве значения атрибута defaultCoreNameAttribute элемента cores .
- Значение свойства solr.default.core.name должно быть установлено в качестве значения атрибута name основного элемента.
- Значение свойства solr.default.core.directory должно быть установлено в качестве значения атрибута instanceDir основного элемента.
Содержимое файла solr.xml выглядит следующим образом:
|
1
2
3
4
5
|
<solr persistent="true"> <cores adminPath="/admin/cores" defaultCoreName="${solr.default.core.name}" host="${host:}" hostPort="${jetty.port:}" hostContext="${hostContext:}" zkClientTimeout="${zkClientTimeout:15000}"> <core name="${solr.default.core.name}" instanceDir="${solr.default.core.directory}" /> </cores></solr> |
Настройка свойств Maven Plugin
Поскольку мы хотим, чтобы все значения свойств, используемые в нашем файле POM, читались из внешнего файла свойств, мы должны использовать плагин, называемый плагином Properties Maven . Мы можем настроить этот плагин, выполнив следующие действия:
- Убедитесь, что свойства читаются из конкретного файла конфигурации профиля.
- Создайте выполнение, которое выполняет цель read-project-properties плагина Properties Maven на этапе инициализации жизненного цикла Maven по умолчанию.
- Создайте выполнение, которое запускает цель свойств read-project плагина Properties Maven на этапе предварительной очистки чистого жизненного цикла Maven.
Конфигурация плагина Properties Maven выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0-alpha-2</version> <configuration> <files> <!-- Properties are read from profile specific property file --> <file>${project.basedir}/profiles/${build.profile.id}/config.properties</file> </files> </configuration> <executions> <!-- Load properties for the default lifecycle --> <execution> <id>default-lifecycle-properties</id> <phase>initialize</phase> <goals> <goal>read-project-properties</goal> </goals> </execution> <!-- Load properties for the clean lifecycle --> <execution> <id>clean-lifecycle-properties</id> <phase>pre-clean</phase> <goals> <goal>read-project-properties</goal> </goals> </execution> </executions></plugin> |
Настройка модуля копирования Maven
Мы будем использовать плагин Copy Maven для двух целей:
- Мы копируем файлы конфигурации Solr в правильный каталог, когда запускаем наш экземпляр Solr.
- Мы удаляем файлы конфигурации Solr при выполнении команды mvn clean в командной строке.
Мы можем начать, добавив следующий XML в раздел плагинов нашего POM-файла:
|
1
2
3
4
5
6
7
8
|
<plugin> <groupId>com.github.goldin</groupId> <artifactId>copy-maven-plugin</artifactId> <version>0.2.5</version> <executions> <!-- Add executions here --> </executions></plugin> |
Давайте продолжим и узнаем, как мы можем настроить плагин Copy Maven для копирования и удаления файлов конфигурации Solr.
Копирование файлов конфигурации Solr
Мы можем скопировать файлы конфигурации Solr, выполнив следующие действия:
- Создайте выполнение, которое запускает цель копирования плагина Copy Maven на этапе компиляции жизненного цикла Maven по умолчанию.
- Скопируйте файл solr.xml в домашний каталог нашего экземпляра Solr. Убедитесь, что фильтрация свойств применяется к файлу при его копировании.
- Скопируйте найденные файлы из каталога src / main / config в каталог solr.solr.home / solr.default.core.directory / conf .
- Скопируйте файлы конфигурации для конкретного языка, найденные из каталога src / main / config / lang, в каталог solr.solr.home / solr.detault.core.directory / conf / lang .
- Скопируйте макросы Velocity и другие файлы, найденные из каталога src / main / config / speed, в каталог solr.solr.home / solr.detault.core.directory / conf / speed .
- Скопируйте таблицы стилей XSL, найденные из каталога src / main / config / xslt, в каталог solr.solr.home / solr.detault.core.directory / conf / xslt .
Конфигурация нашего исполнения выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<execution> <id>copy-solr-config</id> <phase>compile</phase> <goals> <goal>copy</goal> </goals> <configuration> <resources> <!-- Copy solr.xml to correct directory and applies properties filtering to it. --> <resource> <directory>${project.basedir}/src/main/resources</directory> <filtering>true</filtering> <targetPath>${solr.solr.home}</targetPath> <includes> <include>solr.xml</include> </includes> </resource> <!-- Copy configuration files --> <resource> <directory>${project.basedir}/src/main/config</directory> <targetPath>${solr.solr.home}/${solr.default.core.directory}/conf</targetPath> <excludes> <exclude>lang</exclude> <exclude>velocity</exclude> <exclude>xslt</exclude> </excludes> </resource> <!-- Copy language specific configuration files --> <resource> <directory>${project.basedir}/src/main/config/lang</directory> <targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/lang</targetPath> </resource> <!-- Copy Velocity macros and other files --> <resource> <directory>${project.basedir}/src/main/config/velocity</directory> <targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/velocity</targetPath> </resource> <!-- Copy XSL style sheets --> <resource> <directory>${project.basedir}/src/main/config/xslt</directory> <targetPath>${solr.solr.home}/${solr.default.core.directory}/conf/xslt</targetPath> </resource> </resources> </configuration></execution> |
Удаление файлов конфигурации Solr
Мы можем удалить файлы конфигурации Solr, выполнив следующие действия:
- Создайте выполнение, которое запускает цель копирования плагина Copy Maven на этапе чистого жизненного цикла.
- Убедитесь, что сборка не завершится ошибкой, если каталоги не найдены.
- Удалите каталог оверлеев , созданный в корневой каталог нашего проекта Maven.
- Удалите найденный файл solr.xml из домашнего каталога нашего экземпляра Solr.
- Удалите каталог conf, найденный из каталога solr.solr.home / solr.default.core.directory .
Конфигурация нашего исполнения выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<execution> <id>clean-solr</id> <phase>clean</phase> <goals> <goal>copy</goal> </goals> <configuration> <failIfNotFound>false</failIfNotFound> <resources> <!-- Clean the overlays directory from the project root directory --> <resource> <clean>true</clean> <cleanEmptyDirectories>true</cleanEmptyDirectories> <directory>${project.basedir}/overlays</directory> <includes> <include>**/**</include> </includes> </resource> <!-- Remove the solr.xml file --> <resource> <clean>true</clean> <directory>${solr.solr.home}</directory> <includes> <include>solr.xml</include> </includes> </resource> <!-- Remove the conf directory --> <resource> <clean>true</clean> <cleanEmptyDirectories>true</cleanEmptyDirectories> <directory>${solr.solr.home}/${solr.default.core.directory}</directory> <includes> <include>conf</include> </includes> </resource> </resources> </configuration></execution> |
Настройка подключаемого модуля Jetty Maven
Мы можем настроить плагин Jetty Maven для запуска нашего экземпляра Solr, выполнив следующие действия:
- Настройте Jetty для прослушивания порта 8983.
- Убедитесь, что системные свойства считываются из конкретного файла конфигурации профиля. Этот файл свойств содержит свойство solr.solr.home, которое указывает домашний каталог нашего экземпляра Solr.
- Укажите, что контекстный путь нашего приложения — / solr .
Конфигурация плагина Jetty Maven выглядит следующим образом:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>8.1.8.v20121106</version> <configuration> <stopPort>9966</stopPort> <stopKey>stop</stopKey> <connectors> <!-- Listen to port 8983 --> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>8983</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> <!-- Read system properties from profile specific configuration file --> <systemPropertiesFile>${project.basedir}/profiles/${build.profile.id}/config.properties</systemPropertiesFile> <webApp> <contextPath>/solr</contextPath> </webApp> </configuration></plugin> |
Бегущий Солр
Теперь мы создали сборку Maven, которую можно использовать для запуска Solr в среде разработки. У нас есть два варианта запуска нашего экземпляра Solr:
- Мы можем выполнить mvn jetty: запустить команду в командной строке.
- Мы можем выполнить команду mvn jetty: run-war в командной строке.
После того, как мы запустили Solr, мы можем получить доступ к его интерфейсу администратора, используя следующий URL-адрес: http: // localhost: 8983 / solr .
Пример приложения доступен на Github . В этом примере используется пользовательская схема, потому что я планирую использовать ее в своем учебнике по Spring Data Solr. Исходная схема примера находится в каталоге etc.