'sphinx'에 해당되는 글 2건

  1. 2009.03.16 Links / 2009년 3월 15일 by heechul
  2. 2008.09.10 sphinx 업데이트 문제 관련 메모 (2) by heechul

Links / 2009년 3월 15일

Links : 2009.03.16 04:30
신고
Posted by heechul
이전 블로그에 검색엔진인 sphinx 관련된 글을 몇 개 적은 적이 있는데
그에 관련된 문의가 오랜만에 와서, 답장한 내용을 오려 붙여 옮깁니다.

국내 사용자가 많이 없지만 혹시라도 검색하실 분들을 위해서요.
정리가 안 된 내용이고, sphinx 와 관련 없는 분들은 이해하지 못할 내용이니
읽지 않으셔도 됩니다

(초략)
아무튼, 도움이 되실지 모르겠지만 예전에 저희가 고민해서 구축한 시스템에 대해서
살짝 설명드리겠습니다.
 
저희는 db 에 updated 라는 필드를 만들었습니다.
 
정상 인덱스를 뜻하는 normal, 업데이트되어서 델타인덱스에서 인덱스해야 할  updated ,
수정되어서 인덱스 하면 안되는 beUpdated .. 이렇게 세가지 상태로 구분하였습니다.
 
update 필드는 당연히 스핑크스의 attribute 로 지정해두었구요
 
레코드가 수정될 때는 항상 DB 와 검색 인덱스의 attribute 를 같이 beUpdated 로 수정해줍니다.
 
검색할 때는 아래와 같이 filter 를 사용해서 attribute 중 normal 만을 골라서 검색에 사용하시면 수정된 레코드는 실시간으로 제외되구요.
 - $cl->SetFilter("updated",array(0));  
 
수정된 레코드는 델타 인덱싱시에 반영되는데, 델타 인덱싱시의 sql_query 에는 normal 의 상수값을 updated 로 반환하는 꽁수를 사용하였습니다.
- SELECT  ...... #{@nUpdatedType['normal']} as updated from #{tablename}
 
실제 필드 값은 메인 인덱스의 rebuilding 시에 sql_query_pre 문을 통해서 업데이트 되게 되구요..
 
아마 더 좋은 방법이 많을 것이기 때문에 세세한 내용은 줄이도록 하겠습니다.
 
다만, 제 나름대로의 결론은 sphinx의 attribute 는 변경할 수 있고, 검색에도 사용할 수 있다는 점과
인덱스시의 sql_query 및 sql_query_pre 를 유연하게 사용하면, 여러 상황에
대처할 수 있는 검색엔진을 만들 수 있다는 점입니다.

(종략)
신고
Posted by heechul

티스토리 툴바