데이터베이스
MySQL - 전문검색 쿼리 (자연어, BOOLEAN)
sppl24
2024. 10. 6. 16:42
반응형
전문 검색 쿼리 모드
MySQL 서버의 전문 검색 쿼리는 자연어 검색모드, BOOLEAN 검색모드를 지원하고 default 는 자연어 검색이다.
자연어 검색모드와 같이 사용할 수 있는 검색어 확장 기능도 지원한다.
자연어 검색 (NATURAL LANGUAGE MODE)
자연어 검색은 검색어에 제시된 단어들을 가장 많이 가지고 있는 순으로 정렬해서 결과를 반환한다.
SELECT id, title, contents, MATCH(title, contents) AGAINST ('뿌링클' IN NATURAL LANGUAGE MODE) AS score
FROM article
WHERE MATCH(title, contents) AGAINST ('MySQL' IN NATURAL LANGUAGE MODE);
BOOLEAN 검색
자연어 검색은 단순히 검색어에 포함된 단어들이 존재할 때 글 결과만 가져오는데 반해
BOOLEAN 검색은 검색 쿼리에 사용되는 검색어의 존재 여부에 대해 논리적 연산이 가능하다.
SELECT id, title, contents,
MATCH(title, contents) AGAINST ('+뿌링클 -순살' IN BOOLEAN MODE) AS score
FROM article
WHERE MATCH(title, contents) AGAINST ('+뿌링클 -순살' IN BOOLEAN MODE);
위의 쿼리는 "MySQL을 포함하지만 "manual"은 포함하지 않는다.
BOOLEAN 검색시 "+"가 포함된 검색어는 전문 검색 인덱스에 존재해야하고 "-"가 포함된 검색어는 포함되지 않아야한다.
쌍따옴표 ""
로 묶인 부분은 한 단어로 취급된다.
SELECT id, title, contents,
MATCH(title, contents) AGAINST ('+"불닭 까르보"' IN BOOLEAN MODE) AS score
FROM article
WHERE MATCH(title, contents) AGAINST ('+"불닭 까르"' IN BOOLEAN MODE);
위의 쿼리에서 "불닭 까르보" 는 띄어쓰기까지 정확히 일치하는 것이 아니라
"불닭" 단어 뒤에 "까르보"라는 단어가 나오면 일치하는것으로 판단한다.
BOOLEAN 검색에서 연산자 "+" / "-" 를 사용하지 않으면 검색어에 포함된 단어중 아무거나 하나라도 있으면 일치하는것으로 판단한다.
연산자를 사용하지 않으면 자연어 검색과 흡사하게 작동하지만 일치율의 계산이 달라 다른 일치율 값을 리턴한다.
반응형