我们有一个php应用程序,它有一个巨大的Mysql数据库和Solr搜索索引(使用SolrPhpClient)。
在更新我们的索引(通过Cron)之前,我们删除了目前不在库存中的所有商品。只有我们从Mysql中选择项目(库存)并将此数据添加到Solr。
我有一个想法,现有的更新搜索索引的方式对于应用程序性能而言过于昂贵。事实上,我们重新索引所有这些项目(我们在架构中使用一些过滤器,用于俄语词干,小写等等......),而不是在带有标志的索引中留下缺货商品(inStock = 1)。 / p>
在未来,我想,我们将在索引中拥有超过10万个位置(可能更多)。所以这种更新方式会使我们的索引太慢而服务器负载太高。
您能否从更新索引和从中选择数据的位置告诉我您对此问题的看法?
感谢您的关注......
答案 0 :(得分:1)
也许通过调整删除,您可以获得更好的性能。这是伪代码:
这样,您不会每次都对每个文档重新编制索引,而只会对需要更新的文档进行重新索引。
答案 1 :(得分:1)
Solr的DIH是一个很好的解决方案,因为您可能最终会使用已经可用于DIH的PHP编写大量的样板代码。虽然,我不能具体评论DIH的效率与你自己的自定义代码,我的经验是,DIH做得很好。 100K文件(假设它们不是大文件),并不是很大。我已经看到Solr不费力地处理数百万份文档。
我认为DB中不需要“import-success”标志。索尔自己维持着这个状态。
您需要确保表中有一个具有更新时间戳的附加字段,并且删除是软删除。 Solr将使用此时间戳来确定要导入的增量。软删除标志将用于删除已删除的文件。