명

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

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

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

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

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

궁금해서 올려봅니다.


|

댓글 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)
1차로 인덱싱,
mysql 가볍게 안봅니다
댓글을 작성하시려면 로그인이 필요합니다.

프로그램

8,188건
+
제목 글쓴이 날짜 조회
11-10-25 조회 2,500
11-10-18 조회 4,025
11-10-18 조회 2,405
11-10-15 조회 3,631
11-10-10 조회 2,678
11-10-02 조회 2,592
11-09-28 조회 2,411
11-09-24 조회 2,500
11-09-22 조회 2,396
11-09-05 조회 2,879
11-08-31 조회 2,257
11-08-31 조회 2,570
11-08-31 조회 2,422
11-08-29 조회 2,969
11-08-28 조회 2,466
11-08-25 조회 2,519
11-08-17 조회 2,233
11-08-16 조회 2,467
11-08-11 조회 2,923
11-08-07 조회 2,634
11-08-03 조회 2,348
11-07-22 조회 2,089
11-07-12 조회 3,308
11-06-27 조회 2,090
11-06-01 조회 1,755
11-05-17 조회 2,541
11-05-01 조회 2,612
11-04-28 조회 2,899
11-04-28 조회 2,952
11-04-13 조회 2,607
11-03-27 조회 2,731
11-03-27 조회 2,607
11-03-14 조회 2,023
11-03-02 조회 2,349
11-03-02 조회 2,578
11-02-27 조회 3,003
11-02-23 조회 2,387
11-02-19 조회 2,526
11-02-14 조회 4,138
11-02-03 조회 2,930
11-01-24 조회 3,880
11-01-04 조회 2,406
10-12-08 조회 5,420
10-11-15 조회 2,427
10-11-14 조회 2,611
10-11-14 조회 3,623
10-10-29 조회 3,694
10-10-19 조회 2,706
10-10-07 조회 2,532
10-10-05 조회 4,451
10-09-18 조회 2,747
10-09-18 조회 2,487
10-09-17 조회 4,893
10-09-15 조회 2,832
10-09-15 조회 2,361
10-09-15 조회 2,852
10-09-15 조회 2,679
10-09-11 조회 4,008
10-09-11 조회 2,513
10-09-11 조회 2,550
10-09-07 조회 3,826
10-09-07 조회 3,363
10-08-29 조회 2,823
10-07-01 조회 3,070
10-06-30 조회 2,477
10-06-30 조회 2,657
10-06-30 조회 3,010
10-06-13 조회 2,044
10-04-15 조회 3,218
10-04-04 조회 3,448
10-02-23 조회 3,551
10-02-09 조회 3,151
10-01-25 조회 2,662
10-01-25 조회 2,757
09-12-27 조회 4,403
09-11-23 조회 3,626
09-11-20 조회 4,861
09-08-30 조회 3,057
09-08-30 조회 3,051
09-08-12 조회 3,021
09-07-22 조회 4,080
09-07-22 조회 4,727
09-07-15 조회 5,896
09-07-11 조회 2,972
09-06-17 조회 2,715
09-06-15 조회 3,005
09-05-29 조회 3,281
09-05-11 조회 5,915
09-05-08 조회 2,674
09-04-30 조회 3,790
09-04-17 조회 3,110
09-04-04 조회 3,294
09-03-05 조회 3,675
09-02-09 조회 3,642
09-02-03 조회 6,148
08-12-27 조회 3,213
08-12-20 조회 4,300
08-11-21 조회 5,261
08-11-14 조회 2,831
08-11-03 조회 3,296