Давайте рассмотрим задачу конфигурации SOLR для индексирования базы данных.
Структура директорий SOLR выглядит следующим образом:
<solr-home-directory>/
solr.xml
core_name1/
core.properties
conf/
solrconfig.xml
managed-schema
data/
core_name2/
core.properties
conf/
solrconfig.xml
managed-schema
data/
Основным конфигурационным файлом инстанса SOLR является solr.xml, находящийся в домашней директории, по умолчанию это server/solr.
В данном файле определяется конфигурация сервера, включая порт, конфигурации для взаимодействия с ZooKeeper и т.д.
Понятие core (ядро) используется для обобщения отдельного индекса и конфигурационных файлов для его настройки.
core.properties - файл, предназначенный для задания некоторых свойств ядра в виде ключ=значение.
Основные свойства, задаваемые в этом файле:
- name - имя ядра
- config - имя конфигурационного файла. По умолчанию это solrconfig.xml.
- schema - имя конфигурационного файла для описания схемы индексируемых данных. По умолчанию это schema.xml, однако, если в solrconfig.xml, указано использование "managed schema", то свойство schema будет считано один раз и адаптировано под использование "managed schema".
- dataDir - директория для хранения индексов. Может быть указана как абсолютный путь, либо относительно instanceDir (по умолчанию это server/solr).
solconfig.xml - файл для основной конфигурации ядра. Содержит множество конфигураций от настроек кэша до настроек эндпоинтов.
managed-schema - файл определения схемы индексируемых данных. В нём определяются различные поля, их типы.
Определение поля выглядит следующим образом:
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
stored определяет возвращается ли значение этого поля с помощью search query.
multiValued определяет может ли один документ содержать два разных значения этого поля.
Также, можно определить динамическое поле:
<dynamicField name="*_txt" type="text_general" indexed="true" stored="true"/>
В этом случае, можно использовать имена полей, соответствующих шаблону name.
Параметр <uniqueKey>id</uniqueKey>, опреледяет поле, которое является первичным ключём документа.
Далее, для индексации базы данных нам необходимо создать db-data-config.xml
Содержимое данного файла выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource" driver="org.postgresql.Driver" url="jdbc:postgresql://172.18.0.3:5432/stsos"
user="postgres" password="1" name="stsos"/>
<dataSource name="fieldReader" type="FieldStreamDataSource"/>
<document name="items">
<entity name="partner" dataSource="stsos"
query="SELECT * FROM cur.vp_partner"
deltaQuery="SELECT id from cur.vp_partner where modified_at > '${dataimporter.last_index_time}'::timestamp">
<field column="id" name="id"/>
<field column="global_id" name="global_id_s"/>
<field column="title" name="title_txt_ru"/>
<field column="description" name="description_txt_ru"/>
<field column="image" name="image_s"/>
<field column="site_url" name="site_url_s"/>
</entity>
</document>
</dataConfig>
dataSource определяет подключение к базе данных. Для того, чтобы SOLR нашёл драйвер для подключения к БД, его необходимо положить в lib директорию, которая задаётся в solrconfig.xml. По умолчанию это /server/solr/lib.
entity определяет сущность, извлекаеую из БД. Сущности могут быть вложенными. query - запрос, извлекаемый сущности из БД, deltaQuery - запрос, извлекаемый все сущности, изменённые с момента последней индексации.
field определяет поле сущности. column - колонка из БД, name - имя поля, определённого в managed schema.
После задания данной конфигурации мы можем зайти в админку SOLR, выбрать интересующее нас ядро в селекторе core_selector и посмотреть состояние ядра, произвести импорт данных из БД, произвести тестовую выборку и убедиться в работоспособности нашего импорта.
На этом закончу сей краткий экскурс в конфигурацию SOLR для индексации БД.