请帮助我运行用sphinx搜索引擎检查模块的phpunit测试。
要在该模块中搜索,我使用两个sphinx索引docs
和docsdelta
。在数据库中出现新数据后,我会执行以下操作:
exec("indexer docsdelta --rotate");
exec("indexer --merge docs docsdelta --rotate");
它在我的网站上运行良好,我可以通过网络界面添加新文档,它会出现在搜索中。
在我运行phpunit测试的同时,它会“在飞行中”创建新文档,
exec("indexer docsdelta --rotate");
不会获取任何新数据。我的phpunit测试使用事务将数据库回滚到以前的状态,我注意到,如果我关闭事务,索引器可以正常工作。此外,我可以在运行indexer
之前和之后在数据库中查看新数据。也许我错过了一些东西,但我不明白为什么交易对索引器有影响。
是否可以将indexer docdelta
与MySQL事务一起使用?
提前感谢您的帮助!
答案 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