Индекс дельты по метке времени в сфинксе
Я пытаюсь настроить схему main+delta index, используя поле timestamp вместо max_doc_id, как в примере в документации.
source main
{
sql_query_pre = \
REPLACE INTO sph_counter (counter_id, last_update_time) VALUES (1, NOW())
sql_query = \
SELECT id, filename, absolute_path, last_update_time \
FROM files \
WHERE last_update_time <= ( SELECT last_update_time FROM sph_counter WHERE counter_id=1)
}
source delta
{
sql_query = \
SELECT id, filename, absolute_path, last_update_time \
FROM files \
WHERE last_update_time > ( SELECT last_update_time FROM sph_counter WHERE counter_id=1)
sql_query_pre =
}
Индексация и объединение работают как задумано, однако sql_query_pre
для main
источник никогда не обновляет last_update_time
в sph_counter
Таблица.
Я не уверен, где может быть моя проблема.
Я запускаю это, выполнив следующие действия:
re-index the delta (every 30 seconds)
А также:
merge delta into main (every 10 mins)
re-index the delta (after merge)
Я ошибаюсь, думая, что слияние запустит sql_query_pre
обновить sph_counter
last_update_time
?
1 ответ
Я не прав, думая, что слияние запустит sql_query_pre для обновления sph_counter last_update_time?
Да. Во время слияния Sphinx НЕ выполняет ни один из запросов к источникам для индексов. Вероятно, он даже не читает информацию из конфигурационного файла, кроме получения местоположения индексных файлов.
Простейшим способом было бы, чтобы дельта-индекс также обновлял (отдельный) счетчик с помощью sql_query_pre.
Затем во время сразу после объединения вы можете скопировать метку времени из дельта-записи в основную запись.