使用MySQL事务时,Sphinx索引器无法获取数据

时间:2018-01-24 07:49:33

标签: mysql transactions laravel-5.1 sphinx indexer

请帮助我运行用sphinx搜索引擎检查模块的phpunit测试。

要在该模块中搜索,我使用两个sphinx索引docsdocsdelta。在数据库中出现新数据后,我会执行以下操作:

exec("indexer docsdelta --rotate");
exec("indexer --merge docs docsdelta --rotate");

它在我的网站上运行良好,我可以通过网络界面添加新文档,它会出现在搜索中。

在我运行phpunit测试的同时,它会“在飞行中”创建新文档,

exec("indexer docsdelta --rotate");

不会获取任何新数据。我的phpunit测试使用事务将数据库回滚到以前的状态,我注意到,如果我关闭事务,索引器可以正常工作。此外,我可以在运行indexer之前和之后在数据库中查看新数据。也许我错过了一些东西,但我不明白为什么交易对索引器有影响。

是否可以将indexer docdelta与MySQL事务一起使用?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

要使您在事务内部进行的更改在外部可见,即对索引器,您需要更改索引器的SELECT查询的隔离级别。你可以这样做:

sql_query_pre = SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

您可以在此处阅读有关mysql隔离级别的更多信息https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html