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

标签 php mysql sphinx

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

最佳答案

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

}

你听清楚了吗?

关于php - sphinx 如何知道数据已更新以及哪些行已更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20543917/

相关文章:

mysql - JOIN LEFT 有多个条件

sphinx - 思维 sphinx 模糊搜索?

php - mysql_connect() : No such file or directory in/opt/lampp/htdocs/

php - 搜索结果显示类似 google php

php - 如何为 Laravel/Eloquent 模型设置默认属性值?

mysql密码弄乱了我的转储

php - mysql连接排除另一个表中的匹配记录

php - 为什么在 Session_Start() 之前不能输出任何内容?

php - 如何为sphinx查询设置更具体的规则?

lucene - 选择具有自定义排名功能、空间搜索的独立搜索服务器