Индекс дельты по метке времени в сфинксе

Я пытаюсь настроить схему 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_counterlast_update_time?

1 ответ

Я не прав, думая, что слияние запустит sql_query_pre для обновления sph_counter last_update_time?

Да. Во время слияния Sphinx НЕ выполняет ни один из запросов к источникам для индексов. Вероятно, он даже не читает информацию из конфигурационного файла, кроме получения местоположения индексных файлов.

Простейшим способом было бы, чтобы дельта-индекс также обновлял (отдельный) счетчик с помощью sql_query_pre.

Затем во время сразу после объединения вы можете скопировать метку времени из дельта-записи в основную запись.

Другие вопросы по тегам