테스트 사이트 - 개발 중인 베타 버전입니다

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

강력드라이브 1년 전 조회 4,667

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

 

예를 들어 name 필드에 값이

 

1. 홍길동&장동건

2. 현빈

3. 홍길동

 

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

 

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

 

1. 홍길동&장동건

3. 홍길동

 

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

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

답변 4개

채택된 답변
+20 포인트
M
1년 전

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

</p>

<p>SHOW VARIABLES LIKE 'ft_min_word_len';</p>

<p>

로그인 후 평가할 수 있습니다

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

1년 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

강력드라이브
1년 전
답변 감사드립니다.

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

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

'홍길동' 키워드가 들어간 행 모두가 나오게 하려면 어떻게 조건을 줘야 할까요
마르스컴퍼니
1년 전
my.cnf 에서 최소 인덱싱 글자수 설정 후 mysql 서버 재시작과 관련있을 수 있습니다.

ft_min_word_len = 2

https://kabkee.github.io/mysql/mysql-full-text-search/

※ https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-%ED%92%80%ED%85%8D%EC%8A%A4%ED%8A%B8-%EC%9D%B8%EB%8D%B1%EC%8A%A4Full-Text-Index-%EC%82%AC%EC%9A%A9%EB%B2%95

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

M
1년 전

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

강력드라이브
1년 전
+를 붙이면 like 의 '%홍길동' 과 같은걸까요?
M
Min아빠
1년 전
홍길동을 포함한다는 것 입니다.
fulltext index를 걸으신건 맞나요?

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

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

</p>

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

강력드라이브
1년 전
('홍길동' IN BOOLEAN MODE);

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

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

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

로그인