Solr DataImportHandler delta导入

时间:2011-01-06 22:42:01

标签: solr solrj

我正在使用DataImportHandler来索引SOLR中的数据。我使用完全导入来索引我的数据库中的所有数据,这些数据大约是10000个产品。现在我对delta-import使用感到困惑?它是否以间隔为基础索引添加到数据库中的新数据我的意思是它会将添加到我的表中的新数据编入索引大约10行,或者只是更新已编制索引的数据中的更改。

任何人都可以尽快用简单的例子向我解释。

3 个答案:

答案 0 :(得分:4)

DataImportHandler可能有点令人生畏。您的初始查询已加载了10.000个独特的产品。如果指定/ dataimport?command = full-import,则会加载它。 完成此导入后,DIH会存储一个变量({dataimporter.last_index_time}),这是您执行此导入的最后日期/时间。

要进行更新,请指定deltaQuery。 deltaQuery用于标识自上次更新以来数据库中已更改的记录。因此,您可以指定如下查询:SELECT product_id 来自某事 WHERE [date_update]> ='$ {dataimporter.last_index_time}' 这将检索自上次完全更新以来更新的数据库中的所有product_id。您需要指定的下一个查询(deltaImportQuery)是将检索上一步中每个product_id的完整记录的查询。

假设product_id是您的唯一键,solr会发现它需要更新现有记录,或者如果product_id不起作用则添加一个。

为了执行deltaQuery和deltaImportQuery,你使用/ dataimport?command = delta-import

这是对所有可能性的极大简化,检查DataImportHandler上的Solr wiki,它是一个非常强大的工具!

答案 1 :(得分:3)

另一方面说明:

在小时间窗口内使用增量导入(几秒钟内几次)并且数据库服务器位于solr索引服务以外的其他计算机上时,请确保systemtime为两台机器都匹配,因为[date_update]的时间戳是在数据库服务器上生成的,而dataimporter.last_index_time是在另一台机器上生成的。

否则,您将不会更新索引(或太多),具体取决于时差。

答案 2 :(得分:0)

我同意数据导入处理程序可以处理这种情况。 DIH的一个重要限制是它不会对请求进行排队。结果是,如果DIH“忙”索引,它将忽略所有未来的DIH请求,直到它再次“空闲”。跳过的DIH请求丢失且未执行。