【问题标题】:Solr 8.0.0 Delta import add/delete dataSolr 8.0.0 Delta 导入添加/删除数据
【发布时间】: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


【解决方案1】:

所以把它包装在一起。

确保您的 [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

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

【讨论】:

  • 谢谢。在 /var/solr/data/newscore/conf 中创建了 dataimport.properties 文件 仍然没有索引完整数据。 DataImporter 完全导入失败:java.lang.RuntimeException:java.lang.RuntimeException:org.apache.solr.handler.dataimport.DataImportHandlerException:java.sql.SQLException:ResultSet 关闭后不允许操作
  • 你可以尝试让 conf 目录对所有人都可写吗?
猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多