我们有一个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>```
答案 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。您可以用应用程序代码填充它,也可以在内容/项目表上设置触发器以自动填充删除表。