null

Индексируем БД с помощью SOLR

Давайте рассмотрим задачу конфигурации 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 для индексации БД.