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

时间:2013-12-12 12:42:20

标签: php mysql sphinx

正如标题所说, 我一直想知道狮身人面像是如何工作的,它是如何意识到数据已经更新的,以及它如何知道哪些行已更新?特别是最后两个问题。

1 个答案:

答案 0 :(得分:0)

sphinx无法猜测数据何时发生变化,您需要告诉他用cronjob检查新数据。让我举个例子:

假设您使用sphinx索引用户,每天都会有一个cronjob,它将从头开始重新索引用户的所有数据(这意味着索引被销毁并完全重新创建),然后,每隔5分钟,您将拥有另一个仅对新数据进行索引的cronjob(delta)。

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

您的delta_index将检查自上次检查后已更新的用户。

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')
   ...

}

听起来不是很清楚吗?