Solr 8.0.0 Delta import добавить / удалить данные - PullRequest
1 голос
/ 12 апреля 2019

У нас есть база данных MySql (новости), которая имеет следующие поля - posting_id, дата, имя, валюта, страна, срок действия .... и т. Д.

База данных содержит более 1200000 записей.Ежедневно добавляется около 200000 плюс новые записи и удаляется примерно одно и то же число.

posting_id является уникальным идентификатором для каждой записи.

Пожалуйста, помогите написать сценарий дельта-импорта, чтобы индексфайл обновляется в соответствии с записями в базе данных MySql (новости) каждый день.Если posting_id не найден в базе данных (новостях), то то же самое удаляется из индексированного файла solr, а записи с новым posting_id индексируются.

Следующее не работает

<dataSource type="JdbcDataSource"
            driver="com.mysql.jdbc.Driver"
            batchSize="-1"
            autoReconnect="true"
            socketTimeout="0"
            connectTimeout="0"
            url="jdbc:mysql://xxxx/livenews?zeroDateTimeBehavior=convertToNull"
            user="admin"
            password="admin"/>
<document>
  <entity name="news"  
    pk="id"
    query="select * from news"
    deltaImportQuery="SELECT * from news WHERE id='${dih.delta.id}'"
    deltaQuery="SELECT id FROM news WHERE updated_at > '${dih.last_index_time}'"
    >
     <field column="posting_id" name="posting_id"/>
     <field column="date" name="date"/>
     <field column="name" name="name"/>
     <field column="currency" name="currency"/>
     <field column="country" name="country"/>
     <field column="expiry" name="expiry"/>

  </entity>
</document>
</dataConfig>```

1 Ответ

0 голосов
/ 12 апреля 2019

Так что обернуть это вместе.

Убедитесь, что у вас есть файл dataimport.properties в папке [SolrPath] / server / solr / [CoreName] / conf и проверьте разрешения на чтение / запись.Если файл не существует, я думаю, что безопасно просто создать его.

Этот файл будет содержать последние индексные метки времени для объекта, например:

>     #Fri Apr 12 07:12:02 UTC 2019 
>     Conversations.last_index_time=2019-04-12 07\:11\:40
>     ContentSites.last_index_time=2019-04-12 07\:11\:40
>     last_index_time=2019-04-12 07\:11\:31
>     Messages.last_index_time=2019-04-12 07\:11\:59
>     LibraryItems.last_index_time=2019-04-12 07\:11\:41
>     CalendarItems.last_index_time=2019-04-12 07\:11\:31

Ваш запрос / deltaImportQuery / deltaQuery выглядит вполне нормально.Для удаления вы пропускаете атрибут deletionPkQuery, который должен получить идентификаторы удаленных элементов.Для этого необходимо иметь новую таблицу для каждой сущности, которая содержит идентификаторы удаленных элементов.Вы можете заполнить его кодом приложения или установить триггеры в таблицах содержимого / элементов для автоматического заполнения таблицы удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...