태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

알쯔의 외부기억장치

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, 게시판 검색에 적용하다  (8) 2006/02/03
표준과, 권고사항을 지키기 위한 발버둥  (9) 2006/01/09
KBS FunTV  (0) 2005/12/31
미디어 안산1대학  (2) 2005/11/05
Posted by 알쯔
개발항해록/개발일지 l 2006/02/03 23:59
TAG ,

TRACKBACK :: http://blog.arzz.com/trackback/191 관련글 쓰기

  1. Subject: UTF-8 기준, 한글을 초성,중성,종성으로 분리하기

    Tracked from 알쯔의 외부기억장치  삭제

    Ajax를 이용한 키워드 자동완성을 만들며, 초성만 입력했을때도 해당되는 키워드를 가져오기 위해, 삽질끝에 만든 한글을 초.중.종성으로 분리하기 함수입니다. :) 인터넷에 퍼져있..

    2006/02/04 17:02

댓글을 달아 주세요

  1. BlogIcon 엘리타쥬  댓글주소  수정/삭제  댓글쓰기

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

    2006/02/04 14:51
  2. 태양공원  댓글주소  수정/삭제  댓글쓰기

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

    2006/02/10 14:52
    • BlogIcon 알쯔  댓글주소  수정/삭제

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

      2006/02/11 01:25
  3. 태양공원  댓글주소  수정/삭제  댓글쓰기

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

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

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

    2006/02/13 11:05
    • BlogIcon 알쯔  댓글주소  수정/삭제

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

      2006/02/13 13:09
  4. 태양공원  댓글주소  수정/삭제  댓글쓰기

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

    2006/02/13 16:15

1  ... 194 195 196 197 198 199 200 201 202  ... 387 

카테고리

분류 전체보기 (387)
프로필 (2)
일상이야기 (216)
세상바라보기 (9)
미디어로그 (16)
주절거림 (57)
엔터테인먼트로그 (17)
이럴땐, 이렇게! (50)
개발항해록 (20)

달력

«   2012/02   »
      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