Ajax, 게시판 검색에 적용하다

Author : 알쯔 / Date : 2006.02.03 23:59 / Category : 개발일지

Ajax, Ajax 라고 말들이 많길래, 슬쩍 개발중인 게시판 검색에 적용시켜 봤습니다.
생각보다, 관련팁들이 많아, 쉽게 적용한 것 같네요.

네이버 검색의 자동완성과 같이 특정단어를 입력하면 해당하는 검색어 리스트를 가져오도록 프로그래밍 한것이구요.

처음에는 "가" 이런식으로 하나의 완전한 문자를 입력했을 때에만 해당하는 검색어를 가져왔는데, 별로 좋아보이지 않아... 몇시간동안 삽질한 끝에 초성만 입력해도 가져오게 끔 하였습니다.

원래 UTF-8 기반으로 작업하고 있었기에, Ajax에서 한글 인코딩에 크게 신경쓰지 않고, 음절을 초성,중성,종성으로 분리해서 DB에서 인덱스 걸린 필드에서 where like '$keyword%' 식으로 가져오도록 했구요.

물론 키워드 DB에 등록된 키워드일경우만 자동완성이 되구요. 등록되지 않은 키워드로 검색이 발생했을 경우, 해당 키워드를 DB에 등록시킵니다.
그리고 정렬을 시키기 위해 검색이 발생할때마다 해당 키워드에 대한 hit 수를 -1 만큼 감소시켜 order by hit asc 로 가져옵니다.
desc 보다 asc가 빠르다는 소리를 어디서 들은것 같아서요 ^^;;

테스트 주소는 http://www.arzz.com/moimz/board/board.php?bid=freeboard 입니다.

UTF-8 문자열("알쯔 ABC 홈페이지")를 분리하는("ㅇㅏㄹㅉㅡ ABC ㅎㅗㅁㅠㅔㅇㅣㅈㅣ") 함수는 조만간 정리해서 공개하겠습니다. (벌써 있다면 낭패!)

'개발일지' 카테고리의 다른 글

플래시 보안정책에 좌절하다.  (8) 2008.01.14
IRC Flash Client Ver0.0.2  (3) 2008.01.11
Ajax, 게시판 검색에 적용하다  (9) 2006.02.03
알쯔의 코딩규칙 ver 0.0001  (0) 2006.02.01
표준과, 권고사항을 지키기 위한 발버둥  (9) 2006.01.09
KBS FunTV  (0) 2005.12.31

Tags : ,

Trackbacks 1 / Comments 9

  • Favicon of http://vitaless.net 엘리타쥬 2006.02.04 14:51

    단순 엔드 유저인 저로써는 +_+a

    REPLY / EDIT

    • Favicon of http://blog.arzz.com 알쯔 2006.02.05 01:24

      저도, 막 끄적거린거라서... (저게 맞는지도 몰라요 ㅠ)

      EDIT

  • 태양공원 2006.02.10 14:52

    형태소란 말은 명사+조사 이런식의 구조를 구분할때 쓰는 말이라 가 = ㄱ + ㅏ 이런 식의 표현은 맞지 않는 것 같네요. 자음 입력만으로도 검색이 가능하도록 한거인거죠....
    근데.. DB 테이블에 저 변환된(ㅇ ㅏ ㄹ ㅉ ......) 이런 형태로 들어가 있는건가요?

    REPLY / EDIT

    • Favicon of http://blog.arzz.com 알쯔 2006.02.11 01:25

      그렇군요. 고등학교때 배운이후로 관심을 두지 않아서... 기억이 잘 나지 않더라구요 ㅠ
      일단 DB에는 "ㅇㅏㄹㅉㅡ" 이런식으로 들어가게 되어있구요. UTF-8일경우 EUC-KR과는 달리 keyword like 'ㅇ%' 으로 쿼리문을 날릴경우, "ㅇ"으로 시작하는 글이 검색되지 않더군요. 그래서 DB에서부터 자음과 모음이 분리되어 있는 상태입니다.
      물론 그 해당필드는 인덱싱이 걸려져있구요-

      EDIT

  • 태양공원 2006.02.13 11:05

    답변 정말 고맙구요
    추가적으로 질문이 있는데요
    그렇다면 자모음이 분리된 자료를 검색해와서 재조합하나요?
    (만약 그렇다면 재조합 소스도 알려주세요.)
    아니면, 테이블내에 조합된 문자열 필드가 또 있는 건가요?

    혹시 괜찮으시다면 테이블구조랑 일예로 테이블에 들어가 있는 데이타의 형태를 예로 보여주시면 좋을텐데.. 너무 무례한 부탁일까요?!!

    참!! 저번엔 비밀번호를 입력하지 않고 글을 등록하는 바람에 본이 아니게 중복 등록하는 실례를 범했네요.. 죄송해요^^

    REPLY / EDIT

    • Favicon of http://blog.arzz.com 알쯔 2006.02.13 13:09

      분리된 형태말고 완성된 형태의 문자열도 DB에 기록되어있습니다.
      DB구조는 no (기본값) | keycode(초.중.종성) | keyword(검색어) | hit(검색수) 형태이고 keycode 값만 참고해서 값을 뿌려주기때문에 keycode 에만 인덱스가 걸려져 있습니다.
      그리고 DB에서 가져올때는 select keyword from tablename where keycode like '$keyword%'; 형태로 가져오게 되구요.
      물론 분리된 한글을 다시 합치는 함수도 만들려면 만들겠지만, 저렇게 하는것이 나중에 관리하기도 쉬울 것 같더라구요 ^^;;

      EDIT

  • 태양공원 2006.02.13 16:15

    네... 그럴 것 같단 생각은 했는데..
    빠른 답변 정말 고맙구요.. 많은 도움 됐습니다.
    감사합니다. ^^

    REPLY / EDIT

    • Favicon of http://blog.arzz.com 알쯔 2006.02.13 19:39

      유용하게 사용해주세요 >ㅅ<

      EDIT

  • 김수철 2016.05.14 05:43

    안녕하세요 문의 합니다

    REPLY / EDIT

Follow Me

Search

Statistics

  • Total : 2,314,419
  • Today : 8
  • Yesterday : 41

Blog Information

알쯔

Calendar

«   2019/08   »
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Copyright © 알쯔의 외부기억장치 All Rights Reserved
Powered by ARZZ.COM