다중검색 애드온을 사용하시는 분들이 아직 계시려나요?
이번에 1년만에 업데이트를 했습니다.
https://xetown.com/download/1006439
애드온 설정이 바뀐 것은 없습니다.
애드온 스킨도 바뀐 것은 없구요.
다만, 라이믹스의 애드온 트리거 기능 및 커스텀 쿼리 기능을 활용하여,
문서 목록화 쿼리를 누적적으로 실행하던 기능상의 단점을 일부 개선했습니다.
그래서 버전을 무려 0.5로 표기했습니다ㅎㅎ
즉, 문서 목록의 total_count 계산과 범위 검색의 최소값/최대값 계산을 제외하면,
문서 목록 쿼리를 단 1회로 경감했습니다 :)
더불어, 부가적으로 제공되던 서명 검색 기능도 이 팁을 이용한 뒤 문서 목록 쿼리로 통합시켜 속도를 줄이고자 했습니다 ;)
자료를 올리고 보니 한두 가지 개선사항이 보이긴 합니다.
(진정한 완성의 길은 참 멀군요)
1) 커스텀 쿼리를 서브 쿼리로 짰는데, 일반적으로는 테이블을 join하는 것이 성능상 더 좋다는 것 같더군요. 더 알아보고 개선 가능성이 있는지 체크해봐야겠습니다.
2) 범위 검색은 라이믹스의 확장변수가 문자열로만 저장된다는 점 때문에 까다로운 문제가 좀 있습니다. 간혹 개인적인 환경이나 목적 때문에 930~2200의 범위로 이뤄진 확장변수의 앞자리에 '0'을 붙여주고 싶을 때가 있잖아요? 그 경우까지 대비해서 통합적인 코드를 짜고 싶었는데 암튼 어려워서 그건 다음 기회로 미뤄두고,
일단은 해당 기능이 필요한 분들에 한해 아래와 같은 패치 코드를 제공하고자 합니다.
숫자 0을 붙이고 싶으시면 ap_extra_search.addon.php 파일의 341행 쯤에 하이라이트된 코드를 붙여넣기 하세요 :)
$_v = Context::get('extra_vars'.$key.'-2'); if ( $extra_keys[$key]->type !== 'date' && (strlen($extra_keys[$key]->min) !== strlen($extra_keys[$key]->max)) ) { $str_len = strlen($extra_keys[$key]->max); $v = sprintf('%0' . $str_len . 'd', $v); $_v = sprintf('%0' . $str_len . 'd', $_v); } $conditions .= ' (var_idx = ? AND value >= ? AND value <= ?)';
덧. 이전 버전을 사용하시던 분들이 계시다면 속도 비교 테스트도 부탁드려보겠습니다. 저는 문서 숫자가 적은 환경에서 개발을 하다보니 테스트에 한계가 있더라구요.
덧2 :
- 생각해보니 이번 버전부터 카테고리 중복 선택 기능이 지원됩니다.
- 예시 : https://dev.aporia.blog/?mid=board_fKje43&category_srls[]=17330&category_srls[]=13007&category_srls[]=12438&extra_vars8=%EC%84%B8%EB%AF%B8%EB%82%98%EC%8B%A4 여기를 보시면 팁, 에디터, 템플릿 등의 카테고리에 소속된 문서들이 목록화된 것을 보실 수 있을 겁니다.
- 단, 스킨으로 아직 구현은 못했어요. 까먹고 작업을 못했는데, 이것도 일인지라 어쩌면 무의식에서 배제를 했는지도 모르겠네요ㅋ
- 암튼 주소체계에 category_srls[]=17330&category_srls[]=13007&category_srls[]=12438 요렇게 된 부분이 들어가면 카테고리도 중복 취합이 가능하니 스킨 개발을 하신다든가 할 때 참고하셔도 좋겠습니다 :)
+ 작업 의뢰도 받으시나요?