我想使用DataImportHandler保持我的索引与SQL数据库同步(我认为是一个非常香草的事情)。由于我的数据库会很大,我想使用增量导入使用此方法http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport,因此调用的格式为http://localhost:8983/solr/Items/dataimport?command=full-import&clean=false
。这对于添加项目非常有效。Solr删除与自定义全进口
我有一个单独的DeletedItems表在我的数据库,其中包含已从项删除表,用的时候被一并删除的项目的主键。由于DataImport调用的一部分,我希望能够基于沿
SELECT Id FROM DeletedItems WHERE WasDeletedOn > '${dataimporter.last_index_time}'
行查询从我的索引中删除相关的项目,但我无法弄清楚如何做到这一点。上面的链接暗指与神秘的
在这种情况下,这意味着,如果你还想使用deletedPkQuery,那么当运行delta-import命令仍然是必要的。
但将deletedPkQuery设置为上述SQL查询似乎不起作用。然后我读到deletedPkQuery只能用于delta导入,所以我不得不向solr服务器发出两个请求,作为同步过程的一部分?这看起来不正确,因为操作由dataimporter.last_index_time
属性参数化,该属性发生更改。这两个步骤都需要在一个“原子”行动中完成,当然?有任何想法吗?
感谢您的答复。尽管我试图避免增量导入,因为他们似乎对deltaQuery查询返回的每个PK发出一个数据库调用(所以总共n + 1个),当时只有一个可以。从Solr文档:“注意:在Solr中更新文档是一种替代方法,在许多情况下,这种方法更加高效,并且需要在http://wiki.apache.org/solr/DataImportHandlerDeltaQueryViaFullImport上解释更少的配置。他们在那里解释的方法对增量导入非常有效,但我无法理解他们打算如何配置删除。 –
请注意,这是一个完全导入的使用,但它*不*清除索引,只是增加/更新文件 –
啊,好点。我错过了那个细节。我想你将不得不发出两个命令 - 一个用于完全导入,然后是一个delta-import以后触发删除。全进口删除通常使用'clean = true'来处理。要使删除工作与DeltaQueryViaFullImport中描述的技术一起使用,您必须手动处理它们(通过删除字段,之后您可以使用deleteByQuery或通过触发删除的增量导入查询进行清除)。你在进口之间删除了多少文件? – MatsLindh