Php sphinx如何知道数据已更新以及哪些行已更新?

Php sphinx如何知道数据已更新以及哪些行已更新?,php,mysql,sphinx,Php,Mysql,Sphinx,正如标题所说, 我一直想知道sphinx是如何工作的,它是如何意识到数据已经更新的,它是如何知道哪些行更新了什么?特别是最后两个问题。sphinx无法猜测数据何时更改,例如,你需要告诉他使用cronjob检查新数据。让我给你举个例子: 假设您使用sphinx为用户编制索引,每天都会有一个cronjob,它将从头开始重新为用户的所有数据编制索引,这意味着索引将被销毁并完全重新创建,然后,每隔5分钟,您将有另一个cronjob,它将只为新数据编制索引 因此,在用户表中,需要有一列来知道上次更新的时间

正如标题所说,
我一直想知道sphinx是如何工作的,它是如何意识到数据已经更新的,它是如何知道哪些行更新了什么?特别是最后两个问题。

sphinx无法猜测数据何时更改,例如,你需要告诉他使用cronjob检查新数据。让我给你举个例子:

假设您使用sphinx为用户编制索引,每天都会有一个cronjob,它将从头开始重新为用户的所有数据编制索引,这意味着索引将被销毁并完全重新创建,然后,每隔5分钟,您将有另一个cronjob,它将只为新数据编制索引

因此,在用户表中,需要有一列来知道上次更新的时间,我们称之为updated_at

然后,您的delta_索引将检查自上次检查以来已更新的用户

source user
{
   ...
   sql_query_pre = REPLACE INTO sph_counter SELECT 'user', @max_stamp:=UNIX_TIMESTAMP(MAX(updated_at)) FROM users
   sql_query = SELECT user_id, email FROM users WHERE updated_at <= FROM_UNIXTIME(@max_stamp)
   ...
}

source user_delta : user
{
   ...
   sql_query = SELECT user_id, email FROM users WHERE updated_at >= (SELECT FROM_UNIXTIME(MAX_ID) FROM sph_counter WHERE INDEX_NAME = 'user')
   ...

}
你听清楚了吗