2013-04-18 2 views
0

docs의 예와 같이 max_doc_id 대신 timestamp 필드를 사용하여 기본 + 델타 인덱스 구성표를 설정하려고합니다.스핑크스에서 타임 스탬프 별 델타 인덱싱

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 = 
} 

인덱싱 의도 한대로 통합 작업은, 그러나 main 소스의 sql_query_pre는 결코 sph_counter 테이블의 last_update_time를 업데이트하지 않습니다.

내 문제가있는 곳이 확실하지 않습니다.

re-index the delta  (every 30 seconds) 

그리고 :

나는 다음을 수행하여이를 실행하고

merge delta into main (every 10 mins) 
re-index the delta  (after merge) 

은 내가 sql_query_presph_counterlast_update_time를 업데이트 실행 병합 생각에 잘못된 건가요?

+0

왜 max_doc_id 대신 timestamp 필드를 사용하여 인덱스 체계를 구현하려고합니까? –

답변

1

저는 병합이 sph_counter last_update_time을 업데이트하기 위해 sql_query_pre를 실행할 것이라고 생각하는데 잘못 되었습니까?

예. 머지하는 동안 스핑크스는 인덱스에 대한 '소스'쿼리를 실행하지 않습니다. 아마도 인덱스 파일의 위치를 ​​알아내는 것 외에 설정 파일에서 정보를 읽지 못할 수도 있습니다.

가장 간단한 방법은 델타 인덱스가 sql_query_pre를 사용하여 (별도의) 카운터도 업데이트하는 것입니다.

그런 다음 병합 직후 델타 레코드의 타임 스탬프를 주 레코드로 복사 할 수 있습니다.

관련 문제