database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30081 게시물 읽기
No. 30081
full text 검색 ft_min_word_len 문제
작성자
정종영(wjdwhddud)
작성일
2011-10-18 20:48ⓒ
2011-10-18 20:53ⓜ
조회수
9,479

안녕하세요~

제가 삽질을 하고 있는건지...시스템이 이상한건지...ㅜㅡ

ft_min_word_len = 2 로 설정을 해준 상태구요

FULLTEXT 인덱스는 5개의 필드에 걸어줬습니다.

select * from TABLE where match(FTIDX1, FTIDX2, FTIDX3, FTIDX4, FTIDX5) against("한민");

이렇게 검색했을때 "대한민국" 이라는 데이터를 검색하질 못합니다.

select * from TABLE where match(FTIDX1, FTIDX2, FTIDX3, FTIDX4, FTIDX5) against("대한민국");

이렇게 해야지만 (단어가 일치해야지만) 검색이 됩니다...

이건 대체 왜 그런건가요 ㅠ_ㅠ

 

추가
테이블은 UTF-8 default collation 이구요
ft_min_word_len 을 바꾸고 mysql 재시작후 테이블 새로 만들었습니다.
영어로 검색해도 마찬가집니다 ㅠ_ㅠ

select * from TABLE where match(FTIDX1, FTIDX2, FTIDX3, FTIDX4, FTIDX5) against("kor");

라고 검색해도 korea 를 찾지 못하네요...머가문제지...후...

이 글에 대한 댓글이 총 1건 있습니다.

우선 영어를 살펴보면 MySQL에 full text search(이하FTS)를 만든 (아마도) 영어 사용자들의 입장에서는 이미 space로 분리되어 있는 데 단어를 쪼개고 난리 법석을 칠 이유가 없습니다.

Korean is an agglutinative language.

와 같은 예문에서 이미 의미 단위(나중에 검색할때 사람들이 검색할 단어 수준으로) 잘 떨어져 있기 때문에 FTS는 굳이 단어를 쪼개고 쪼개진 단위별로 (검색을 위한) 색인을 할 이유가 없는거죠.

끽해봐야 명사의 복수형, 동사의 진행형, 과거형 수준으로만 분석해서(stemming) 검색하면 깔끔하게 끝납니다.(물론 stemming이 쉽다는 거지 그 외 과정은 역시 쉽지 않은.. ㄷㄷ)

 

영어와는 다르게 한국어는 교착어입니다.

간단히 말씀드려서 space를 기준으로 했을때 한국어는 의미 단위로 떼었다 붙였다 합니다.

예를 들어 '한국어는' 이라는 단어는 원래 '한국/nq + 어/ncn + 는/jcs'으로 풀어 쓸 수 있겠죠.

(참고 nq: 고유명사, ncn: 비서술형 명사, jcs: 주격조사)
(참고2 한국어/ncn + 는/jcs 가 맞는 거 아니냐 등은 좀 따지지 말고 넘어가주시면.. ^^;; )

 

당연히 영어가 기준이었을 MySQL에 한국어를 위해서 단어를 쪼개고 붙이고 할 이유가 없으니 fts 할아버지를 적용해도 원하시는 검색결과를 얻기는 어려우실 것으로 알고 있습니다.

 

아.. 뭐 그럼 SQL 내에서 풀 수 있는 방법이 절대 없는 것이냐...는 아니고

http://blog.naver.com/uook_/130117113937 <== (얘는 MS-SQL 기준으로 만든.. ㅋ)

와 같은 식으로 SQL에서 비스므리 하게 구현하는 방법이 있기는 합니다.

걍 참고만 하셔야지 저대로 구현하면 문제가 참 많습니다. T,.T;

중복되는 색인어를 몰아서 색인하기(색인의 크기를 줄여서 속도의 향상)
콜렉션으로 구성하기(요즘은 개나소나 통합검색 만들어 달라고 하죠)
정확도순 검색 결과 정렬
등등 추가로 구현하셔야 될 내용이 꽤 많습니다. -_-;;

 (저 글을 쓸 당시에는 백수였는데, 별로 호응이 없어서 추가 포스팅은 안 할거 같은.. ㅋ)

 

우욱님이 2011-10-19 16:45에 작성한 댓글입니다.
이 댓글은 2011-10-19 16:49에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
30093table 생성문 뽑는거.. show create table 말고 [2]
좋아요
2011-10-25
7299
30087윈도우 mysql4 케릭터셋 관련 [2]
박의호
2011-10-24
7986
30084테이블 분리 ? [1]
장사꾼
2011-10-20
8333
30081full text 검색 ft_min_word_len 문제 [1]
정종영
2011-10-18
9479
30079질의문 부탁드립니다. [1]
권기혁
2011-10-18
7292
30078mysql 4.1 함수생성 오류
주지훈
2011-10-18
7882
30077der typ von Feld 에러
김양훈
2011-10-18
7965
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다