【发布时间】:2019-04-12 16:00:11
【问题描述】:
我们有一个 MySql 数据库(新闻),其中包含以下字段 - 发布 ID、日期、名称、货币、国家/地区、到期...等
数据库有超过 1200000 个条目。每天大约有 200000 多条新记录被添加,大约相同的数量被删除。
posting_id 是每条记录的唯一 ID。
请帮助编写一个增量导入脚本,以便每天根据 MySql 数据库(新闻)中的记录更新索引文件。如果在数据库(新闻)中未找到 posting_id,则将其从 solr 索引文件中删除,并对具有新 posts_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>```
【问题讨论】:
-
你能发布你的日志吗?对于删除行,您需要有一个新表,所有已删除的 id 都将重新发送。您可以通过使用触发器或其他东西来实现这一点。然后,您需要在另一个属性“deletedPkQuery”中对该表进行选择查询。
-
对 Solr 非常陌生。 solr 是否有任何同步脚本。 Solr 会自动检查 MySql 数据库,并根据主数据库的变化对其进行索引。
``` WARN false SimplePropertiesWriter Unable to read: dataimport.properties ERROR false EntityProcessorBase getNext() failed for query 'select * from news':org.apache.solr.handler.dataimport.DataImportHandlerException: java.sql.SQLException: ResultSet 关闭后不允许操作``` -
对于完整索引:使用查询属性,对于增量索引:使用带有 last_index_time 字段的 deltaImportQuery/deltaQuery。这在你的 sn-p 上看起来不错。对于删除,您必须为 solr 提供已删除行的 id(pk="id")。因此,您需要将它们存储在单独的表中。您可以通过您的应用程序代码填写此表,但对我来说,使用触发器似乎更容易。对于日志错误:检查文件 dataimport.properties 是否存在于您的 solr/Module/conf 文件夹中。该文件保存最后一个索引变量。还要检查读/写权限
-
所以据我所知不存在同步脚本。此外,为了安排增量(增量)索引,您必须编写某种工具来调用 url(例如通过 curl)来触发索引。但对于其余的,solr 确实是一个很棒的搜索服务器工具,只是缺少一些基本的东西,比如索引调度,而且它有一种奇怪的方式来提供它。一旦你习惯了它,你就会爱上它:-)
-
谢谢。创建了 dataimport.properties 文件。仍然有关于索引所有记录的问题。
已在 - [link]stackoverflow.com/questions/55645825/… 处打开此参考的票证,但出现错误
标签: solr