我使用DataImportHandler对SOLR中的数据进行索引。我使用完全导入来索引我的数据库中的所有数据,大约有10000 products.Now。我对增量导入的用法感到困惑?它是在间隔的基础上索引添加到数据库中的新数据吗?我的意思是,它将索引添加到我的表中的大约10行的新数据,或者它只是更新已经索引的数据中的更改。
有没有人可以尽快用简单的例子给我解释。
发布于 2011-01-20 05:48:33
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}‘This将从数据库中检索自上次完全更新以来更新的所有product_ids。您需要指定的下一个查询(deltaImportQuery)是检索上一步中每个product_id的完整记录的查询。
假设solr是您的唯一键,product_id将计算出它需要更新现有记录,或者如果product_id不起作用,则添加一条记录。
为了执行deltaQuery和deltaImportQuery,您可以使用/dataimport?命令=增量导入
这是对所有可能性的极大简化,请查看DataImportHandler上的Solr wiki,它是一个非常强大的工具!
发布于 2012-09-07 23:12:32
另一点是:
当您在较小的时间窗口(例如几秒钟内几次)内使用增量导入,并且数据库服务器位于solr index服务之外的另一台计算机上时,请确保两台计算机的systemtime匹配,因为[date_update]的时间戳是在数据库服务器上生成的,而dataimporter.last_index_time是在另一台服务器上生成的。
否则,您将不会更新索引(或更新太多),这取决于时间差。
发布于 2012-07-27 01:30:13
我同意数据导入处理程序可以处理这种情况。DIH的一个重要限制是它不对请求进行排队。这样做的结果是,如果DIH正在“忙”索引,它将忽略所有未来的DIH请求,直到它再次“空闲”。跳过的DIH请求将丢失且不会执行。
https://stackoverflow.com/questions/4620774
复制相似问题