2. 불린 풀텍스트 검색
MySQL은 IN BOOLEAN MODE 수정자를 사용하여 부울 전체 텍스트 검색을 수행 할 수 있습니다. 이 수정자를 사용하면 특정 문자는 검색 문자열의 단어 시작 또는 끝에 특수한 의미를 갖습니다. 다음 쿼리에서 + 및 - 연산자는 단어 일치 또는 일치 여부를 나타냅니다. 따라서 쿼리는 "MySQL"이라는 단어가 있지만 "YourSQL"이라는 단어가없는 모든 행을 검색합니다.
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 ... |+----+-----------------------+-------------------------------------+
Note
In implementing this feature, MySQL uses what is sometimes referred to as implied Boolean logic, in which
+ stands for AND
- stands for NOT
[no operator] implies OR
불린 풀텍스트 검색은 다음 특징을 갖습니다.
- 50%의 스레졸드를 사용하지 않음
- 유사도에 의해 정렬하지 않음. 다음 쿼리에서 결과를 볼것임. 최상 유사도 행은 MySQL을 두번 포함하는 것이지만 첫 번째가 아닌 마지막에 보여짐
- FULLTEXT인덱스가 없어도 작동함. 물론 느림
- 최소 최대 단어 길이 풀텍스트 파라미터가 적용됨
- 스탑워드 리스트가 적용됨
불린 풀텍스트 검색은 다음 연산자를 지원함
- + 플러스 기호가 앞에 있는 단어는 각 행에 반드시 존재해야 함
- - 마이너스 기호는 해당 단어가 반드시 없어야함
참고 : - 연산자는 다른 검색어와 일치하는 행을 제외하기 위해서만 작동합니다. 따라서, 앞에 오는 용어 만 포함하는 부울 모드 검색은 빈 결과를 반환합니다. "제외 된 용어가 들어있는 행을 제외한 모든 행"을 반환하지 않습니다.
- 연산자 없음, 기본적으로 워드는 선택적이지만 이 것을 포함하는 행이 높음. 이는 IN BOOLEAN MODE 가 없이 쓴 MATCH() ... AGAINST() 를 모방
- >< 이들 두 연산자는 단어의 유사도 기여를 바꾸는데 사용. > 연산자는 높이고, < 는 낮춘다. 다음 리스트를 통해 예시를 본다.
- () 괄호는 부분식으로 단어를 그룹화. 괄호화된 그룹은 네스트될 수 있음
- ~ 딜더는 음 연산임. 워드의 기여정도를 반대로 함. 이는 noise 워드를 표시할 때 유용. 이런 단어를 갖고 있는 행은 다른 것보다 낮아지지만 모두 제외시키지는 않음. 제외는 - 연산자
- * 아스테리스크는 트렁케이션 연산자. 다른 연산자와 달리. 영향받을 단어에 붙여야 함. * 연산자로 시작하는 단어는 이 것으로 시작하는 단어
절단 연산자와 함께 단어가 지정되면 너무 짧아서 (ft_min_word_len 설정에서 결정된 것처럼) 또는 중지 단어 인 경우에도 부울 조회는 제거되지 않습니다. 이는 단어가 너무 짧거나 중지 단어로 보이지 않지만 접두사로 시작하는 단어 형식으로 문서에 있어야하는 접두사로 인해 발생합니다. ft_min_word_len = 4라고 가정합니다. 그런 다음 '+ word + the *'를 검색하면 '+ word + the'를 검색하는 것보다 적은 수의 행이 반환됩니다.
. 이전 쿼리는 그대로 남아 있으며 단어와 * (로 시작하는 단어)가 문서에 있어야합니다.
. 후자의 질의는 + 단어로 변환됩니다 (단어 만 필요함). the는 너무 짧고 stopword이며, 두 조건 중 하나라도 무시해도 충분합니다.
- " 큰 따옴표 ( ")로 묶여있는 구는 입력 된대로 구를 포함하는 행과 만 일치합니다. 전체 텍스트 엔진은 구를 단어로 분할하고 단어에 대해 FULLTEXT 색인에서 검색을 수행합니다. 구문 검색은 구문과 정확히 동일한 단어를 포함하고 동일한 순서로만 요구합니다 (예 : "test phrase"는 "test, phrase"와 일치 함).
구문에 단어에 단어가 없으면 결과는 비어 있습니다. 예를 들어, 모든 단어가 불용어이거나 최소 길이의 색인어보다 짧으면 결과는 비어 있습니다.
다음 예제에서는 부울 전체 텍스트 연산자를 사용하는 일부 검색 문자열을 보여줍니다.
'apple banana'
두 단어 중 적어도 하나를 포함하는 행을 찾습니다.
'+apple +juice'
두 단어가 포함 된 행을 찾습니다.
'+apple macintosh'
'사과'라는 단어가 포함 된 행을 찾으십시오. 'macintosh'도 포함하는 경우 상위 행의 순위를 매 깁니다.
'+apple -macintosh'
"apple"은 포함하지만 "macintosh"는 포함하지 않는 행을 찾으십시오.
'+apple ~macintosh'
"사과"라는 단어가 포함 된 행을 찾으십시오. 그러나 행에도 "macintosh"라는 단어가 포함되어 있으면 행이 그렇지 않은 경우보다 낮게 평가하십시오. 이것은 "macintosh"의 존재로 인해 행이 전혀 반환되지 않게되는 '+ 사과 -macintosh'를 검색하는 것보다 "부드럽습니다".
'+apple +(>turnover <strudel)'
"apple"및 "turnover"또는 "apple"및 "strudel"(순서에 관계없이)이라는 단어가 있지만 "apple strudel"보다 높은 "apple turnover"등급을 가진 행을 찾습니다.
'apple*'
"apple", "apples", "applesauce"또는 "applet"과 같은 단어가 포함 된 행을 찾습니다.
'"some words"'
"일부 단어"와 정확히 일치하는 단어가 들어있는 행을 찾습니다 (예 : "지혜의 일부 단어는 있지만 일부 단어는 포함하지 않는 행"). "구를 묶는 문자는 구를 구분하는 연산자 문자이며 검색 문자열 자체를 묶는 따옴표가 아닙니다.
최근 덧글