1
正如標題所說, 我總是想知道獅身人面像是如何工作的,它是如何意識到數據已經更新以及它如何知道哪些行已經更新了?最後兩個問題。斯芬克斯如何知道數據已更新以及哪些行已更新?
正如標題所說, 我總是想知道獅身人面像是如何工作的,它是如何意識到數據已經更新以及它如何知道哪些行已經更新了?最後兩個問題。斯芬克斯如何知道數據已更新以及哪些行已更新?
sphinx無法猜測數據何時發生變化,您需要告訴他用cronjob檢查新數據。讓我給你看一個例子:
假設你使用sphinx爲用戶建立索引,每天都會有一個cronjob,它將從頭開始重新索引用戶的所有數據(這意味着索引被銷燬並完全重新創建),然後,每5分鐘,你會有另一個cronjob只索引新的數據(三角洲)。
因此,在您的用戶表中,您需要有一個列以瞭解上次更新的時間,我們稱之爲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')
...
}
這聽起來很清楚嗎?
非常感謝你〜! – tiyee