2011-01-06 86 views
0

我正在使用DataImportHandler索引SOLR中的数据。我使用完全导入来索引我的数据库中大约10000个产品的所有数据。现在,我对增量导入使用情况感到困惑吗?它是否索引添加到数据库中的新数据的时间间隔,我的意思是它将索引添加到我的表的新数据大约10行,或者它只是更新已经索引的数据中的更改。Solr DataImportHandler delta import

任何人都可以请它简单的例子,只要你能向我解释。

回答

4

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

为了进行更新,您需要指定一个deltaQuery。 deltaQuery旨在识别自上次更新以来数据库中发生更改的记录。因此,您可以指定一个如下所示的查询:SELECT product_id FROM sometable WHERE [date_update]>'$ {dataimporter.last_index_time}' 这将从数据库中检索自上次完全更新以来更新的所有product_id。您需要指定的下一个查询(deltaImportQuery)是将从上一步检索每个product_id的完整记录的查询。

假设的product_id是你唯一的密钥,Solr的会找出需要更新现有记录,或添加一个,如果PRODUCT_ID好好尝试的工作。

为了执行deltaQuery并使用/ dataimport?命令=增量导入

这是所有的可能性大大简化,检查DataImportHandler Solr的维基,它是一个非常强大的工具deltaImportQuery !

+0

[date_update]时间戳存储在数据库中吗?如果是这样,当数据库服务器的日期与安装SOLR的服务器不完全同步时,这不会产生问题吗? – mrd3650 2011-12-27 09:57:05

0

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

3

在另一方面:

当你使用一个小的时间窗口内的增量导入(如在几秒钟几次)和数据库服务器是其它机比Solr的索引服务上,使确保两台机器的systemtime相匹配,因为在数据库服务器上生成了[date_update]的时间戳,另一个生成了dataimporter.last_index_time

否则,你将不会被更新取决于时间的差异指数(或太多)。