2

为了在 Solr 中执行增量更新,last_index_time(存储在 dataimport.properties 中)与数​​据库中的日期/时间戳列进行比较。

是否可以在 Solr 中进行配置,以便:

  • 我们使用数据库中的其他列(比如一个按顺序增加的“id”)而不是日期/时间戳?
  • last_index_id存储在 dataimport.properties 而不是 last_index_time ?
  • 在增量导入期间,我们可能会使用类似“where id > dataimporter.last_index_id”的条件?

提前致谢!

4

1 回答 1

3

我相信您的用例是您有一个带有自动增量主键的仅附加表。Solr DIH 似乎不支持您想要的。(尽管尝试询问 Solr 用户邮件列表。)

但是还有另一种方法,您可以尝试使用 Solr Wiki DataImportHandlerDeltaQueryViaFullImport中给出的示例中的想法。如果您可以将idSolr 索引中的最大值作为参数传递给导入请求,那么您可以在数据导入查询中使用它。

为此,您需要首先向 Solr 发出查询以获取最大的 id:

q=*:*&sort=id desc&rows=1&fl=id

打电话给这个MAXID。然后,当您调用完全导入时,传递此 ID,例如:

/dataimport?command=full-import&id=MAXID

您可以使用${dataimporter.request.id}. 在您的 data-config.xml 中,您的查询应如下所示:

<entity name="item" 
        pk="id"
        query="SELECT id, name FROM item 
                 WHERE id > '${dataimporter.request.id}'">

当然,要对所有文档进行完整的重新索引,您将通过id=0,假设 0 是您获得的最小键值。

我自己还没有尝试过,但是您可以进行实验并说出您的发现。

(说了这么多,显然很容易将时间戳列添加到您的表中。如果您使用的是 MySQL,您可以保留时间戳列,DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP甚至不必费心自己更新它。)

于 2013-03-30T22:49:21.333 回答