현재 2 천만 건 이상의 레코드가있는 MySQL 쿼리를 인덱싱하는 데 Sphinx를 사용하고 있습니다.스핑크스 주/델타 인덱싱, sql_query_killlist
델타 색인을 사용하여 기본 색인을 업데이트하고 모든 새 레코드를 추가하고 있습니다.
불행히도 테이블에 대한 변경 사항은 삭제됩니다.
sql_query_killlist를 사용하여 삭제하거나 업데이트해야하는 모든 문서 ID를 가져올 수 있다는 것을 알고 있습니다. 불행히도 이것이 실제로 어떻게 작동하는지 이해하지 못하고 스핑크스의 문서에는 이해할 수있는 좋은 예가 없습니다.
다음 예제를 사용하면 어떻게 killlist를 구현할 수 있습니까? sphinx.conf에서 MySQL을
CREATE TABLE sph_counter
(
counter_id INTEGER PRIMARY KEY NOT NULL,
max_doc_id INTEGER NOT NULL
);
에서
다른 모든 설정은 기본, 에서 복사되지만 소스와 경로가 무시되는 방법
source main
{
# ...
sql_query_pre = SET NAMES utf8
sql_query_pre = REPLACE INTO sph_counter SELECT 1, MAX(id) FROM documents
sql_query = SELECT id, title, body FROM documents \
WHERE id<=(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
}
source delta : main
{
sql_query_pre = SET NAMES utf8
sql_query = SELECT id, title, body FROM documents \
WHERE id>(SELECT max_doc_id FROM sph_counter WHERE counter_id=1)
}
인덱스 주요
{
source = main
path = /path/to/main
# ... all the other settings
}
노트 (그들은 반드시) 색인 델타 : 주
{
source = delta
path = /path/to/delta
}
문서 테이블에서 업데이트하고 삭제할 항목이 있습니까? 그것 없이는 킬리스트를 구현하기가 어렵습니다. – Imraan