更新或删除Solr索引中的数据?

时间:2011-01-28 11:53:36

标签: php mysql search solr

我们有一个php应用程序,它有一个巨大的Mysql数据库和Solr搜索索引(使用SolrPhpClient)。

在更新我们的索引(通过Cron)之前,我们删除了目前不在库存中的所有商品。只有我们从Mysql中选择项目(库存)并将此数据添加到Solr。

我有一个想法,现有的更新搜索索引的方式对于应用程序性能而言过于昂贵。事实上,我们重新索引所有这些项目(我们在架构中使用一些过滤器,用于俄语词干,小写等等......),而不是在带有标志的索引中留下缺货商品(inStock = 1)。 / p>

在未来,我想,我们将在索引中拥有超过10万个位置(可能更多)。所以这种更新方式会使我们的索引太慢而服务器负载太高。

您能否从更新索引和从中选择数据的位置告诉我您对此问题的看法?

感谢您的关注......

2 个答案:

答案 0 :(得分:1)

也许通过调整删除,您可以获得更好的性能。这是伪代码:

  • 仅删除“缺货”和Solr索引
  • 中的项目
  • 仅添加/更新“库存”中的项目,但Solr中不存在或库存计数错误。

这样,您不会每次都对每个文档重新编制索引,而只会对需要更新的文档进行重新索引。

答案 1 :(得分:1)

Solr的DIH是一个很好的解决方案,因为您可能最终会使用已经可用于DIH的PHP编写大量的样板代码。虽然,我不能具体评论DIH的效率与你自己的自定义代码,我的经验是,DIH做得很好。 100K文件(假设它们不是大文件),并不是很大。我已经看到Solr不费力地处理数百万份文档。

我认为DB中不需要“import-success”标志。索尔自己维持着这个状态。

您需要确保表中有一个具有更新时间戳的附加字段,并且删除是软删除。 Solr将使用此时间戳来确定要导入的增量。软删除标志将用于删除已删除的文件。