개발 의뢰 관련건 중에서.. > 토크

토크

개발과 관련된 어떤 얘기도 괜찮습니다.

개발 의뢰 관련건 중에서.. 정보

개발자 개발 의뢰 관련건 중에서..

본문

http://sir.co.kr/bbs/board.php?bo_table=rq_program&wr_id=34410

검색엔진 관련된 의뢰가 있네요..
어려운건 없어 보이는 의뢰인데, 한가지가...

4번 항목
- 수십 또는 수백만 데이터 검색 지원(검색속도가 느려지면 안됩니다.)

단순히 mysql의 like 검색으로는 해결될수 없는 부분인데, 어떻게 하는건지요?

궁금해서 올려봅니다.


추천
0
비추천
0

댓글 8개

첫번째 댓글이 아래댓글에 대한 암시인듯 한데, 누구글을 봤다는건지는 모르겠고,

당연히 풀텍스트로 처리해야죠.
풀텍스트로 처리시 천만건 정도는 보통 1/100 ~ 1/10 초 정도로 처리됩니다.(0.01~0.1)
제가 예전에 작업한 자료중에 대략 500만건 정도되는 작업이 있었는데,
국내외 상당히 많은 영화와 음악의 제목과 간략한 내용을 수집해서 검색, 출력했던 사이트 입니다.
기존 사용하던 방식이 5~10초 정도 걸려서(검색어에따라) 1초 이하로 해준다는 조건으로 db 새로 처리하고 풀텍스트로 작업해서 0.5초 이하로 처리해 드렸습니다. 아주 만족해 하시더군요.
흠 fulltext search indexing 이군요.
형태소 분석을 하지 않은 데이타를 가지고 검색하게 되면, 검색 품질 저하가 발생할텐데, 클라이언트가 납득할 수준의 검색이 되는지요..
물론 컨텐츠가 영어라면 문제 없겟지만,,
풀텍스트는 utf-8 이 기본입니다.
utf-8 에 한글/영어가 무슨 상관일지요.
그리고 위에 댓글에 500만건 정도의 자료를 작업했다고 기재했습니다만.
영화와 음악자료니까 당연히 한글/영어/일어/한자 등이 모두 섞여 있습니다.
구글링을 좀해보니..
mysql에서 indexing 텍스트를 추출하는 방식은 스톱워드(공백이나 화이트스페이스) 를 가지고 추출하게 됩니다.
청소년상담원 단어가 포함된 문서가 있을때, "상담원"을 검색하면, 해당 문서가 검색되지 않을것입니다.
한글은 영어에 비해서 복합명사를 많이 사용하기때문에 위의 케이스가 비번히 발생하게 될것입니다.
mysql에서 like %단어% 보다 떨어지는 수준으로 검색되는것이지요.

(의뢰자가 이를 감수한다면 문제가 없겠죠.)
우선 내 개인적인 견해로는,
남들이 쓴글을 갖고 이렇다 저렇다라고 하는것은 개발자에게 심각한 문제라고 생각합니다. 물론 필요에 따라 적절한 참고는 좋겠지요.
내가 직접 해본결과를 체계적으로 정리해두고 자료화해서 작업할때 적용하거나 참고합니다.

댓글내용을 제대로 안보신건지 잘 이해가 안됩니다만..
영화나 음악자료를 검색할때 반드시 시작절을 갖고 검색하지 않습니다.
예를 들어, '해리포터와 마법사' 라면 해리/포터/해리포터/마법사/와 마법사' 등 포함되는 모든 문자들은 검색됩니다.
또한 ful text 에는 여러 사용자 옵션을 지원합니다.
예를 들어,
against ('해리*' IN BOOLEAN MODE)
against ('+해리* +마법사*' IN BOOLEAN MODE)
아주 다양하게 사용이 됩니다.

질문하고 댓글 단 내용을 보니 단순한 질문의 의도가 아니고 본인의 생각을 중심으로 이야기하고자 하는것으로 생각됩니다.
그러면 직접 그런 환경을 꾸며서 여러가지 검색 방식을 만들어서 처리해보고 경험해보는것이 가장 좋을것이라고 권해 드립니다.

저는 제가 경험하고 겪은 기준을 통해 이런이런 방식으로 처리가 가능하다라고 참고글을 적어드린 것이니, 본인이 적절히 참고하여 필요하면 참고하면 되고 아니면 다른걸 찾거나 로직을 구상해서 겪어보면 됩니다.
그냥 생각을 적다보니, 어투가 매끄럽지 않았네요.
너그러이 넘겨주셨으면 합니다.
개발자 게시판에 질문을 하는 이유는 단 하나. 궁금하기 때문입니다.
(내가 알고 있는 방법 이외에, 다른 해결방법은 무엇일까 하는 욕심때문이죠. 공짜를 바라면 안되는거지만, 개발자 게시판이니까^^)

본문으로 돌아와서..
제가 지적한 부분은 위의 글중에서 "포터" 검색어로 검색이 되느냐 하는 것입니다.(제가 알고 있는 바로는 안된다는것입니다.)
SELECT * FROM `noble` where MATCH (body) AGAINST ('*포터*' IN BOOLEAN MODE)
전체 3,599
토크 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT