MySQL 풀텍스트 검색
IN BOOLEAN MODE 모디파이어를 사용해서 불리안 전문 검색을 실행한다:mysql> SELECT * FROM articles WHERE MATCH (title,body)
-> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);
+----+-----------------------+-------------------------------------+| id | title                 | body                                |+----+-----------------------+-------------------------------------+|  1 | MySQL Tutorial        | DBMS stands for DataBase ...        ||  2 | How To Use MySQL Well | After you went through a ...        ||  3 | Optimizing MySQL      | In this tutorial we will show ...   ||  4 | 1001 MySQL Tricks     | 1. Never run mysqld as root. 2. ... ||  6 | MySQL Security        | When configured properly, MySQL ... |+----+-----------------------+-------------------------------------++ 와 – 연산자는 매치가 일어났을 때 존재해야 하거나 또는 존재하지 말아야 하는 단어를 각각 나타낸다. 따라서, 이 쿼리는 단어 “MySQL”는 존재하지만 “YourSQL”은 없는 모든 열을 추출하게 된다.- 이 검색은 50% 쓰레드홀드를 사용하지 않는다.
- 이 검색은 내림 차순 연관도 순서로 열을 자동 정렬하지는 않는다: 가장 높은 연관도를 가지고 있는 열은 “MySQL”을 두 번 가지고 있는 열이지만, 맨 처음이 아니라 맨 나중에 나오게 된다.
- 이 검색은 비록 검색 속도는 저하되지만 FULLTEXT인덱스를 사용하지 않아도 동작을 한다.
- 최소 및 최대 단어 길이 전문 파라미터가 적용된다.
- 스톱워드 리스트가 적용된다.
- +
이 부호가 단어 앞에 나오면 그 단어는 반드시 리턴되는 각각의 열에 존재해야 한다는 것을 의미한다.
- -
이 부호가 단어 앞에 나오면 그 단어는 반드시 리턴되는 어떠한 열에도 존재하지 말아야 함을 의미한다.
Note: - 연산자는 다른 검색어에 의해 매치되는 열을 배제하는 기능만 실행한다. 따라서, -연산자가 앞에 있는 검색어만을 갖는 블리안-모드 검색은 그 결과 값이 없게(empty) 된다.
- (연산자 없음)
디폴트로는 (+ 또는 – 가 지정되지 않을 때) 단어를 넣는 것이 옵션 사항이지만, 단어가 있는 것이 우선 순위가 높게 된다. 이것은 IN BOOLEAN MODE 수정자 (modifier)가 없는 MATCH() ... AGAINST()의 기능을 모방한 것이다.
- > <
위의 두 연산자는 한 단어의 컨트리뷰션 (contribution)을 특정 열에 할당된 관련 값으로 변경하고자 할 때 사용된다. > 연산자는 컨튜리뷰션을 증가시키며 < 연산자는 그것을 감소시킨다. 아래에 있는 예문을 참조.
- ( )
괄호는 단어를 그룹화 해서 서브익스프레션 (subexpression)시킨다. 괄호화된 그룹은 네스티드될 수 있다.
- ~
단어 앞에 나오는 틸데 (tilde) 기호는 부정 연산자와 같이 동작을 하며, 그 단어의 컨트리뷰션이 해당 열과 부정 연관성을 갖도록 만든다. 이 연산자는 “노이즈 (noise)” 단어를 마킹 (marking)하는데 유용하다. 이와 같은 형태의 단어를 가지고 있는 열은 다른 열보다 우선 순위가 낮게 되지만, -연산자처럼 모든 것을 배제하는 것은 아니다.
- *
별표 연산자는 트런케이션 (truncation) (또는 와잉드카드) 연산자와 유사한 기능을 실행한다. 다른 연산자와는 달리, 이것은 적용 단어 뒤에 표시 한다. 매치되는 단어는 *연산자 앞에 있는 단어와 매치되는 것이 된다.
- "
이중 인용 구호 연산자는  안에 있는 구문과 동일한 철자의 구문이 있는 열을 매치 시킨다. 전체 문장 엔진 (full-text engine)은 구문을 단어로 분리하고, 각각의 단어에 대해서 FULLTEXT 인덱스 검색을 실행한다.
- 'apple banana'
두개의 단어 중에 최소한 한 개의 단어가 있는 열을 찾는다.
- '+apple +juice'
두 개의 단어 모두가 있는 열을 찾는다.
- '+apple macintosh'
“apple”이 있는 열을 찾되, 그 열에 “macintosh”가 있으면 그 열을 상위로 랭크 시킨다.
- '+apple -macintosh'
“apple”는 있지만 “macintosh”는 없는 열을 찾는다.
- '+apple ~macintosh'
“apple”이 있는 열을 찾되, 그 열에 “macintosh”가 있으면 “macintosh”가 없는 열보다 순위를 아래로 만든다. 이 방식은 '+apple -macintosh'보다 부드러운 방식인데, 그 이유는 “macintosh”의 존재가 아무것도 리턴하지 못하도록 하기 때문이다.
- '+apple +(>turnover
“apple” 과 “turnover”, 또는 “apple” 과 “strudel” 을 갖고 있는 열을 찾되, “apple turnover”가 “apple strudel”보다 우선 순위를 높게 만든다.
- 'apple*'
“apple”로 시작되는 단어를 갖고 있는 열을 찾는다.
- '"some words"'
"’ 캐릭터는 구문을 한정하는 연산자 기호라는 점을 기억하자. 이 기호는 검색 스트링 자체를 인용하지는 못한다.