Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否从Solr索引中更新或删除数据?_Php_Mysql_Search_Solr - Fatal编程技术网

Php 是否从Solr索引中更新或删除数据?

Php 是否从Solr索引中更新或删除数据?,php,mysql,search,solr,Php,Mysql,Search,Solr,我们有一个php应用程序,它有一个巨大的Mysql数据库和Solr的搜索索引(使用SolrpClient) 在更新我们的索引(通过Cron)之前,我们将删除目前不在库存中的所有项目。我们只需要从Mysql(库存)中选择项目并将这些数据添加到Solr中 我有一个想法,现有的更新搜索索引的方法对于应用程序性能来说太昂贵了。事实上,我们重新编制了所有这些项目的索引(我们在模式中使用了一些过滤器,用于俄语词干、小写等…),而不是在带有标志(inStock=1)的索引中遗漏库存项目 我想,在未来,我们在索

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

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

我有一个想法,现有的更新搜索索引的方法对于应用程序性能来说太昂贵了。事实上,我们重新编制了所有这些项目的索引(我们在模式中使用了一些过滤器,用于俄语词干、小写等…),而不是在带有标志(inStock=1)的索引中遗漏库存项目

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

你能从更新索引和从中选择数据的位置告诉我你对这个问题的看法吗


感谢您的关注……

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

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

通过这种方式,您不会每次都对每个文档重新编制索引,而是只对那些需要更新的文档重新编制索引。

Solr的DIH是一个很好的解决方案,因为您可能最终会使用PHP编写大量DIH已经提供的锅炉板代码。虽然,我不能具体评论DIH相对于您自己的自定义代码的效率,但我的经验是,DIH做得很好。10万个文档(假设它们不是大型文档)并不是很大。我已经看到Solr不费吹灰之力就处理了数百万个文档

我认为数据库中不需要“导入成功”标志。索尔独自维持着这个状态


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

什么是“100000位置”?你是说索引中有100000个文档吗?请看看这个问题的答案是否有用。2 Mauricio-是的,导入mysql表中的每一行都是Solr索引中的一个文档。2 Shashikant-感谢链接,在询问stackoverflow的搜索问题之前,我还没有找到它。问题是,我们现在不使用DIH进行导入—只是一个php脚本。导入mysql数据后,我是否可以使用DIH进行更改(这是关于mysql表中导入成功标志的问题)?DIH是否比php脚本更有效(其逻辑是:从musql查询非实际数据-从Solr索引中删除-查询实际数据-将其添加(更新)到索引)?但哪种方法更适合索引和搜索查询的性能?要清除所有缺货位置的索引或将此文档保留在带有标志的索引中,您需要进行测试--它将根据文档的大小和数量而有所不同。正如我所说,它可能会提供更好的性能,但唯一的方法将是尝试它。