Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 Sphinx属性的实时更新_Php_Mysql_Sphinx - Fatal编程技术网

Php Sphinx属性的实时更新

Php Sphinx属性的实时更新,php,mysql,sphinx,Php,Mysql,Sphinx,我试图实现一个网站上的斯芬克斯搜索服务器。该网站将用于内部跟踪 数据库定义了一个状态,我已将其配置为sphinx中的一个属性。我需要这是在没有任何延迟的实时更新。我还想使用磁盘索引,这样可以很容易地对索引进行定期更新,并且避免使用SphinxQL 我发现这可以通过sphinx API的UpdateAttribute方法实现。 我想知道的是,是否可以从MySQL触发器调用UpdateAttribute()?我想我可以有一个php脚本,在get请求中获取所需的输入,然后更新索引。请建议可能的实现方法

我试图实现一个网站上的斯芬克斯搜索服务器。该网站将用于内部跟踪

数据库定义了一个状态,我已将其配置为sphinx中的一个属性。我需要这是在没有任何延迟的实时更新。我还想使用磁盘索引,这样可以很容易地对索引进行定期更新,并且避免使用SphinxQL

我发现这可以通过sphinx API的UpdateAttribute方法实现。 我想知道的是,是否可以从MySQL触发器调用UpdateAttribute()?我想我可以有一个php脚本,在get请求中获取所需的输入,然后更新索引。请建议可能的实现方法,因为我还没有找到任何有效的方法

如果您有任何其他实现搜索的方法,以便我实时更新属性,请让我知道


谢谢

UpdateAttribute是正确的方法

在我看来,可以使用MySQL用户定义函数在MySQL触发器中调用此方法。但是,我认为这不是一个好的解决方案,因为这样的函数会非常复杂,并且会大大降低mysql更新的速度


一个更好的解决方案被张贴在狮身人面像上。它使用gearman和现有的UDF。(从技术上讲,为sphinx C API编写UDF更好,但这更容易)请参见。

您使用的是SphinxSE存储引擎吗?还是一个独立的服务器守护进程?我不确定我推荐哪种情况的触发器,但如果它是守护进程,那么肯定不是。即使您使用了PHP和Sphinx守护程序,也可能会出现30毫秒的延迟。你能解释一下为什么不能接受吗?@carpii没有使用狮身人面像。数据库位于使用InnoDB的MySQL中。“我不确定我会为这两种情况推荐一个触发器,但如果它是一个守护进程,那么肯定不会。”-没有得到这个。请您具体说明您所指的两个案例以及每一个案例的建议。我想通过sys_exec和curl调用一个php脚本来实现这一点。然后,脚本使用sphinxAPI更新索引。为什么会有如此大的滞后?有没有其他方法做同样的事情?欢迎所有建议,请尝试最后一个问题。thnxSphinxSE是一个MySQL存储引擎,您可以直接从MySQL查询Sphinx。另一种方法是运行searchd deamon,并使用API(PHP或其他什么)查询/更新Sphinx。听起来像你;重新使用daemon/API方法。我所指的30毫秒的延迟是假设您在一个单独的服务器上运行Sphinx守护程序,这是主观的,但对于从PHP发布MySQL更新后可以更新Sphinx的速度,这是一个合理的估计。我可能应该指出,我甚至不能100%确定是否可以从SphinxSE更新属性。但是使用API,然后使用UpdateAttribute()是一种方法。还有一个折衷方案是不必安装Gearman。没有那么好,但对很多人来说已经足够了。如中所示,您的意思是可以直接从MySQL调用UpdateAttribute()?怎样因为这个函数是在Sphinx的phpapi中定义的,所以我认为必须从PHP本身调用它。你能不能详细解释一下为什么它会减慢更新速度?感谢您直接从MySQL使用UpdateAttribute,您必须使用C API。这样的函数会减慢mysql更新查询的速度,因为每次更新时它都必须连接到sphinx?更重要的是MySQL是如何使用它的?好吧,我需要一些自定义项,因为sphinx没有自己的自定义项。sphinx论坛上发布了一个更好的解决方案。它使用gearman和现有的UDF。(从技术上讲,为sphinx C API编写UDF更好,但这更容易)参见