풀텍스트 검색은 MyISAM 테이블에서만 가능.

풀텍스트 검색은 UCS-2 에서는 사용할 수 없다 (그러나 ,MySQL 4.1.1 이후에서는 ,UTF-8 그리고 기능한다 ).

MATCH() 함수의 파라미터는 모두 , 같은 FULLTEXT 인덱스의 일부를 이루는 같은 테이블의 컬럼이 아니면 안된다 (IN BOOLEAN MODE 로 MATCH() 를 실행하는 경우를 제외하다 ).

FULLTEXT 인덱스의 컬럼은 모두 같은 캐릭터 세트를 사용하고 있지 않으면 안 된다.

MATCH() 의 컬럼 리스트는 테이블의 일부의 FULLTEXT 인덱스 정의의 컬럼 리스트와 정확하게 일치하고 있지 않으면 안 된다 (IN BOOLEAN MODE 로 MATCH() 를 실행하는 경우를 제외하다 ).

AGAINST() 의 인수는 정수 캐릭터 라인이 아니면 안된다.

MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION] )



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 인덱스 검색을 실행한다.

아래에 있는 예문들은 불리안 전체 문장 (full-text) 연산자를 사용한 검색 스트링의 예를 몇가지 보여 주는 것이다:
  • '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"'
some words라는 문장을 정확히 갖고 있는 열은 찾는다 (예를 들면, “some words of wisdom은 찾지만 some noise words는 아님). 구문을 감싸고 있는 "’ 캐릭터는 구문을 한정하는 연산자 기호라는 점을 기억하자이 기호는 검색 스트링 자체를 인용하지는 못한다.

+ Recent posts