채택완료

MYSQL에서 MATCH ( name ) AGAINST 사용 질문입니다.

LIKE '% %' 검색이 느려서 MATCH AGAINST 를 사용을 하는데요.

 

예를 들어 name 필드에 값이

 

1. 홍길동&장동건

2. 현빈

3. 홍길동

 

MATCH ( name ) AGAINST ( '홍길동' ) 이렇게 검색 조건을 주면

 

3행 홍길동 데이터만 출력이 되는게 맞나요?

 

1. 홍길동&장동건

3. 홍길동

 

이렇게 '홍길동'이 포함된 모든 행이 나오도록 하려면 조건을 어떻게 주어야 할까요?

|

답변 4개 / 댓글 6개

채택된 답변
+20 포인트

내용상으로 봤을때는 ft_min_word_len 설정을 확인해 보셔야 할듯 합니다.

Copy
SHOW VARIABLES LIKE 'ft_min_word_len';

match (name) against ('홍길동*' in boolean mode);

답변에 대한 댓글 2개

답변 감사드립니다.

그런데 쿼리시 결과가 나오지 안네요ㅠ

1. 홍길동&장동건
3. 홍길동

'홍길동' 키워드가 들어간 행 모두가 나오게 하려면 어떻게 조건을 줘야 할까요

Copy
SELECT * FROM table_name WHERE MATCH (name) AGAINST ('+홍길동' IN BOOLEAN MODE);

앞에 +를 넣어주는게 더 정확한 값을 가지고 오실수 있습니다.

답변에 대한 댓글 2개

+를 붙이면 like 의 '%홍길동' 과 같은걸까요?
홍길동을 포함한다는 것 입니다.
fulltext index를 걸으신건 맞나요?

다음과 같이 해보시는건 어떨까 합니다.

Copy
SELECT * FROM table_name WHERE MATCH (name) AGAINST ('홍길동' IN BOOLEAN MODE);

답변에 대한 댓글 2개

('홍길동' IN BOOLEAN MODE);

이렇게 하여도 SELECT의 결과가 나오지 않네요. ㅠㅠ
[code]
SELECT * FROM table_name WHERE name LIKE '%홍길동%';
[/code]
이렇게 하시면 원하시는 결과값을 얻으실 수 있지 않을까 생각합니다.

답변을 작성하려면 로그인이 필요합니다.