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

Sphinx indexer does not fetch data when MySQL transaction is used

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

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

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

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

在我 运行 phpunit 测试并创建新文档的同时 "on fly",

exec("indexer docsdelta --rotate");

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

是否可以通过某种方式将 indexer docdelta 与 MySQL 事务一起使用?

提前感谢您的帮助!

要使您在事务内部所做的更改在外部可见,即对于索引器,您需要更改索引器的 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