Solr 8.0.0 Delta导入添加/删除数据

时间:2019-04-12 04:45:29

标签: solr

我们有一个MySql数据库(新闻),该数据库具有以下字段-posting_id,日期,名称,货币,国家,有效期.... etc

数据库有超过1200000个条目。每天大约200000加上新记录,大约删除相同的数字。

posting_id是每个记录的唯一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 :(得分:0)

因此将其包装在一起。

确保在[SolrPath] / server / solr / [CoreName] / conf文件夹中具有dataimport.properties文件,并检查读取/写入权限。如果文件不存在,我认为只创建它是安全的。

此文件将包含每个实体的最后索引时间戳,例如:

>     #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

您的query / deltaImportQuery / deltaQuery看起来还不错。对于删除,您错过了deletePkQuery属性,该属性应获取已删除项目的ID。因此,需要为每个实体创建一个新表,其中包含已删除项目的ID。您可以用应用程序代码填充它,也可以在内容/项目表上设置触发器以自动填充删除表。