Grundsätzlich benötigen Sie einen Basisindex und dann einen Delta-Index. Der Delta-Index aktualisiert alles, was im Basisindex enthalten ist. Sie könnten also den Basisindex um 1 Uhr morgens laufen lassen und dann alle 5 Minuten den Delta-Index aktualisieren. Sie speichern einen Zeitstempel entweder in einer Tabelle oder in einer anderen Datenbank, der steuert, welche Datensätze in den Delta-Index aufgenommen werden.
Sie können dann in sql_query_killlist nachsehen, um Dinge zu entfernen, die gelöscht wurden, siehe die Dokumentation.
Ein Beispiel für einen Konf könnte folgendermaßen aussehen.
source _user
{
type = mysql
sql_host = localhost
sql_user = root
sql_pass =
sql_db = db
sql_port = 3306
sql_attr_uint = category_id
sql_attr_timestamp = time_posted
}
source user_base : _user
{
sql_query_pre = REPLACE INTO sphinx_lastrun (object_name, object_value) SELECT 'users', @max_stamp:=UNIX_TIMESTAMP(MAX(stamp))-1 FROM users
sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp < FROM_UNIXTIME(@max_stamp)
sql_query_info = SELECT id FROM users WHERE id=$id
}
source user_incr : _user
{
sql_query = SELECT id, category_id, name, UNIX_TIMESTAMP(stamp) AS stamp FROM users WHERE stamp >= (SELECT FROM_UNIXTIME(object_value) FROM sphinx_lastrun WHERE object_name = 'users')
# You'll need sql_query_killlist to get rid of stuff that is deleted. See the docs
sql_query_info = SELECT id FROM users WHERE id=$id
}
index _user
{
docinfo = extern
mlock = 0
morphology = none
min_word_len = 2
charset_type = sbcs
min_prefix_len = 3
enable_star = 1
}
index user_base : _user
{
source = user_base
path = /opt/sphinx/var/data/user_base
}
index user_incr : _user
{
source = user_incr
path = /opt/sphinx/var/data/user_incr
}
index user
{
type = distributed
local = user_base
local = user_incr
}
searchd
{
listen = 3312
log = /opt/sphinx/var/log/searchd/searchd.log
query_log = /opt/sphinx/var/log/searchd/query.log
pid_file = /opt/sphinx/var/log/searchd/searchd.pid
}