1

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

谁能尽快用简单的例子向我解释一下。

4

3 回答 3

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 和 deltaImportQuery 您使用 /dataimport?command=delta-import

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

于 2011-01-19T21:48:33.203 回答
3

另一个注意事项:

当您在一个小时间窗口内使用增量导入(比如几秒钟内几次)并且数据库服务器位于 solr 索引服务之外的另一台机器上时,请确保systemtime两台机器的 匹配,因为[date_update]在数据库服务器dataimporter.last_index_time上生成,在另一个服务器上生成。

否则,您将不会根据时差更新索引(或太多)。

于 2012-09-07T15:12:31.553 回答
0

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

于 2012-07-26T17:30:13.377 回答