MySQL에서도 할 수 있다! 전문 검색 방법과 조건 검색!

소개



MySQL에서 전체 텍스트 검색을 할 수 있다는 것을 알고 계셨습니까?
이번은 MySQL에서의 전체 텍스트 검색 방법에 대해 간단하게 소개하겠습니다! !

【YouTube 동영상】 MySQL 전문 검색 고급 검색 방법


MySQL의 전체 텍스트 검색



전체 텍스트 검색은 여러 문장 그룹에서 특정 문자열을 검색하는 것입니다.
전체 텍스트 검색에는 grep 및 index 유형이 있습니다.

grep 형은 런타임에 내용을 스캔하는 방식으로 검색 대상이 커지면 속도가 저하됩니다.
MySQL에서 말하면 LINKE 절을 사용하여 문자열을 검색하는 것과 같습니다.

index형은 DB등록시에 Index를 작성하는 방식으로, 메모리 소비가 많은 대신, 고속으로 검색할 수 있습니다.
MySQL에서 사용하는 경우 MATCH 또는 AGAINST 절을 사용하여 검색합니다.

전체 텍스트 검색을 수행하는 방법



다음과 같이 전체 텍스트 검색을 위한 인덱스를 만들 수 있습니다.
CREATE FULLTEXT INDEX idx on articles(body);

실행할 때는 MATCH에서 검색할 열을 결정하고 AGAINST에서 조건을 결정합니다.
SELECT id, title, body FROM articles WHERE MATCH(body) AGAINST ('TEST HOGE')

검색 모드



AGAINST 내에서 검색 모드를 지정할 수 있습니다.
기본적으로 Natural Language Mode입니다.
  • Natural Language Mode

  • 기본적으로 적용되는 모드에서 OR 검색만 수행합니다.
    단, 완전 일치가 아니기 때문에, 이하와 같은 문자도 히트합니다.
    「ありがとう」で検索 -> 「ありがとう」だけでなく、「あり」も検索される
    
  • Boolean Mode

  • AND, NOT, 그룹핑 등 고급 검색이 가능합니다.
    런타임은 다음과 같이 지정합니다.
    SELECT id, title, body FROM articles WHERE MATCH(body) AGAINST ('TEST +HOGE' IN BOOLEAN MODE)
    
  • Natural Language Mode with Query Expansion

  • 한 번 Natural Language Mode처럼 검색합니다.
    첫 번째 결과에서 해당 문자 주변에 있던 문자도 기록합니다.
    그리고 주변에 있던 문자를 포함하여 다시 검색하여 관련 단어를 표시하거나 맞춤법 오류를 수정할 수 있습니다.
    단지 모호 검색을 할 수 있는 반면, 2번 실행하므로 결과 표시가 느려집니다.

    연산자 정보 (Boolean Mode)



    Boolean Mode에서 사용할 수 있는 연산자에 대해 자세히 살펴보겠습니다.

    아무것도 연산자를 붙이지 않는 경우, OR 검색이 됩니다.
    AGAINST ('TEST HOGE' IN BOOLEAN MODE)
    

    +를 붙이면 AND 검색이 가능합니다.
    AGAINST ('+TEST +HOGE' IN BOOLEAN MODE)
    

    NOT 검색은 -로 할 수 있고, 그룹핑은 ()로 묶습니다.
    AGAINST ('(TEST HOGE) -TE' IN BOOLEAN MODE)
    

    정확히 일치하려면 ""로 묶어야합니다.
    AGAINST ('"HOGE"' IN BOOLEAN MODE)
    

    요약



    이번에는 MySQL의 전체 텍스트 검색에 대해 소개했습니다.
    사용소는 고민하지만 의외로 쉽게 할 수 있습니다!

    MySQL편은 일단 여기서 끝입니다만, 그 밖에 무엇인가 소개해 주었으면 하는 것이 있으면, 연락 부탁드립니다!

    트위터 이나 youtube 에서의 코멘트도 기다리고 있습니다!

    좋은 웹페이지 즐겨찾기