Статьи

Запуск Solr с Maven

Запуск Solr с Maven

Solr — это поисковый сервер с открытым исходным кодом, созданный с использованием возможностей индексации и поиска Lucene Core , и его можно использовать для реализации масштабируемых поисковых систем практически с любым языком программирования.

Хотя у Solr есть много преимуществ, настройка среды разработки не входит в их число. Эта запись блога описывает, как мы можем запустить Solr с помощью Maven и убедиться, что каждый разработчик использует одну и ту же конфигурацию, схему и версию Solr.

Требования нашей сборки Maven следующие:

  • Свойства нашей сборки Maven должны быть прочитаны из внешнего файла свойств. Единственное исключение из этого правила заключается в том, что номера версий зависимостей объявлены в нашем файле POM.
  • Процесс сборки должен копировать файлы конфигурации Solr в правильный каталог при запуске нашего экземпляра Solr.
  • Процесс сборки должен очистить файлы конфигурации, когда разработчик выполняет команду mvn clean из командной строки.
  • Должно быть возможно запустить наш экземпляр Solr с помощью плагина Jetty Maven.

Мы можем выполнить эти требования, выполнив следующие действия:

  1. Создайте файл POM.
  2. Получите необходимые зависимости.
  3. Получите файлы конфигурации Solr.
  4. Создайте файл свойств, содержащий свойства, используемые в нашей сборке Maven.
  5. Отредактируйте файл solr.xml .
  6. Настройте плагин свойств Maven.
  7. Настройте плагин Copy Maven.
  8. Настройте плагин 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
    <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, выполнив следующие действия:

  1. Загрузите бинарный дистрибутив Solr 4.1.0 .
  2. Распакуйте загруженный пакет в нужный каталог.
  3. Перейдите в корневой каталог распакованного бинарного дистрибутива Solr.
  4. Скопируйте следующие файлы из каталога 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 ,
  5. Скопируйте файлы конфигурации для конкретного языка, найденные в каталоге example / solr / collection1 / conf / lang, в директорию src / main / config / lang .
  6. Скопируйте макросы Velocity и другие файлы, найденные из каталога example / solr / collection1 / conf / speed, в директорию src / main / config / speed.
  7. Скопируйте таблицы стилей XSL, найденные из каталога example / solr / collection1 / conf / xslt, в директорию src / main / config / xslt .
  8. Скопируйте файл solr.xml из каталога exaple / solr / collection1 в каталог src / main / resources .
  9. Создайте каталог src / main / webapp / WEB-INF . Этот каталог необходим для запуска экземпляра Solr.

Теперь мы успешно получили необходимые файлы и готовы перейти к следующему этапу.

Создание файла свойств

Нашим следующим будет создание файла свойств, который используется в нашей сборке Maven, и добавление необходимой конфигурации профиля сборки в наш файл POM. Пойдем дальше и узнаем, как это делается.

Сначала мы создадим файл свойств, который используется в нашей сборке Maven. Мы можем сделать это, выполнив следующие действия:

  1. Создайте каталог с профилями / dev в корневом каталоге нашего проекта Maven.
  2. Создайте файл свойств 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 core
solr.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 и использовать фильтрацию для замены вместо переменных, включенных в наши ресурсы. Мы можем сделать это, выполнив следующие действия:

  1. Создайте отдельный профиль с именем dev и убедитесь, что это профиль по умолчанию для нашей сборки.
  2. Объявите свойство с именем build.profile.id и установите его значение равным «dev».
  3. Создайте фильтр, который считывает специфический для профиля файл конфигурации и заменяет переменные, найденные в наших ресурсах, фактическими значениями свойств.

Мы можем завершить шаги один и два, добавив следующее объявление профиля в наш файл 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 . Эти изменения описаны ниже:

  1. Значение свойства solr.default.core.name должно быть установлено в качестве значения атрибута defaultCoreNameAttribute элемента cores .
  2. Значение свойства solr.default.core.name должно быть установлено в качестве значения атрибута name основного элемента.
  3. Значение свойства 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 . Мы можем настроить этот плагин, выполнив следующие действия:

  1. Убедитесь, что свойства читаются из конкретного файла конфигурации профиля.
  2. Создайте выполнение, которое выполняет цель read-project-properties плагина Properties Maven на этапе инициализации жизненного цикла Maven по умолчанию.
  3. Создайте выполнение, которое запускает цель свойств 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 для двух целей:

  1. Мы копируем файлы конфигурации Solr в правильный каталог, когда запускаем наш экземпляр Solr.
  2. Мы удаляем файлы конфигурации 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, выполнив следующие действия:

  1. Создайте выполнение, которое запускает цель копирования плагина Copy Maven на этапе компиляции жизненного цикла Maven по умолчанию.
  2. Скопируйте файл solr.xml в домашний каталог нашего экземпляра Solr. Убедитесь, что фильтрация свойств применяется к файлу при его копировании.
  3. Скопируйте найденные файлы из каталога src / main / config в каталог solr.solr.home / solr.default.core.directory / conf .
  4. Скопируйте файлы конфигурации для конкретного языка, найденные из каталога src / main / config / lang, в каталог solr.solr.home / solr.detault.core.directory / conf / lang .
  5. Скопируйте макросы Velocity и другие файлы, найденные из каталога src / main / config / speed, в каталог solr.solr.home / solr.detault.core.directory / conf / speed .
  6. Скопируйте таблицы стилей 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, выполнив следующие действия:

  1. Создайте выполнение, которое запускает цель копирования плагина Copy Maven на этапе чистого жизненного цикла.
  2. Убедитесь, что сборка не завершится ошибкой, если каталоги не найдены.
  3. Удалите каталог оверлеев , созданный в корневой каталог нашего проекта Maven.
  4. Удалите найденный файл solr.xml из домашнего каталога нашего экземпляра Solr.
  5. Удалите каталог 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, выполнив следующие действия:

  1. Настройте Jetty для прослушивания порта 8983.
  2. Убедитесь, что системные свойства считываются из конкретного файла конфигурации профиля. Этот файл свойств содержит свойство solr.solr.home, которое указывает домашний каталог нашего экземпляра Solr.
  3. Укажите, что контекстный путь нашего приложения — / 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.

Ссылка: Запуск Solr с Maven от нашего партнера JCG