워드프레스에 전문검색(fulltext search) 추가하기

워드프레스는 자체적으로 검색 기능을 제공합니다. 워드프레스를 설치하면 검색은 자동으로(?) 작동하기 때문에 사용자가 워드프레스를 사용하면서 검색에 대해 신경 쓸 일은 거의 없습니다. 또한 워드프레스는 다양한 검색 옵션을 지원하여 검색 대상을 지정 또는 변경하거나 검색 결과의 순서를 사용자 입맛에 맞춰 변경할 수도 있습니다.

그런데 사이트의 콘텐츠가 많아지거나 검색 결과의 품질에 좀더 신경을 쓰기 시작하면 워드프레스의 기본 검색 기능이 어딘지 조금 ‘부족하다’는 느낌이 들 때가 생깁니다.

어째서 그럴까요?

워드프레스 기본 검색 방식

워드프레스에서 검색은 콘텐츠가 저장된 데이터베이스(MySQL)로 질의를 보내 그 결과값을 받아서 화면에 표시하는 방식으로 작동합니다. 이때 워드프레스는 기본적으로 데이터베이스에서 입력한 검색어가 포함된 문장을 찾아 최신 날짜 순으로 출력하게끔 설정되어 있습니다.

예를 들어 워드프레스 검색창에 “구글”이라는 단어를 입력하여 검색을 하면, 워드프레스는 데이터베이스에 다음과 같은 질의를 하게 되죠:

  1. 제목(post_title)에 ‘구글’이 포함되거나
  2. 요약문(post_excerpt)에 ‘구글’이 포함되거나
  3. 본문(post_content)에 ‘구글’이 포함된 모든 글을 가져올 것!

그런데 이런 검색 방식은 단어 형태나 문장 형태의 문자열 데이터를 전체 일치 또는 전방(prefix) 일치 형태로 검색하는 방식이라, 대용량의 문서나 문장에서 특정한 검색어가 포함된 문서를 찾아내는 작업에는 비효율적입니다.

이런 문제점을 해결하기 위해 데이터베이스에서는 전문검색(fulltext search) 기능을 별도로 제공합니다. 전문검색이란 문서 내에서 원하는 검색어가 포함되어 있는지 검색하고 일정 조건에 맞춰 검색어와 가장 연관성이 높은 문서를 검색결과로 가져오는 검색 방법입니다. 워드프레스가 데이터를 저장하는데 사용하는 MySQL도 마찬가지여서, 데이터베이스 자체적으로 전문검색 기능을 제공합니다.

그렇다면 워드프레스 검색에도 기본적으로 제공하는 검색 방식 대신 이 전문검색 기능을 추가하면 어떨까요?

네, 가능합니다. 가능하며 이미 나와 있는 여러 플러그인들 덕분에 별로 어렵잖게 내 워드프레스 사이트에 전문검색 기능을 추가할 수 있습니다.

Better Search

그 중 하나인 Better Search 플러그인을 적용해 보기로 하겠습니다. Better Search 플러그인은 워드프레스 플러그인 디렉터리에 등록되어 있는 무료 플러그인이기 때문에 부담없이 사이트에 추가할 수 있는 장점이 있습니다.

우선 Better Search 플러그인을 내 사이트에 설치합니다. 플러그인을 설치하고 활성화시키는 방법은 워드프레스 표준 방식대로 진행하면 됩니다.

플러그인을 설치하면 관리자 대시보드에 “Better Search”라는 메뉴가 추가되며, 이 메뉴를 클릭해 보면 다음과 같이 설정 페이지가 표시됩니다.

여기까지가 끝입니다.^^ 엥?

사실 이 플러그인을 설치하기만 하면, 워드프레스의 기본 검색 기능이 전문검색 방식으로 대체됩니다. 사이트 검색창에서 검색어를 입력해 보면 이제 검색 결과가 기존의 방식이 아닌 전문검색 방식에 의해 검색된 순서로 표시되는 것을 확인해 볼 수 있을 것입니다.

나머지는 Better Search 플러그인 설정 페이지에서 필요한 부분을 찾아 설정을 하면 됩니다. 그 중 몇 가지 설정값에 대해서만 설명하면,

Seamless integration

이 설정은 검색결과를 Better Search 플러그인이 제공하는 별도의 템플릿에 표시할지 아니면 기존에 사용하는 사이트의 검색 결과에 표시할지를 선택하는 메뉴입니다. 디폴트값은 기존 검색결과 페이지에 표시합니다.

검색어 추적(search tracking)

Better Search에서는 사용자가 검색창에 입력한 검색어를 추적할 수 있는 기능을 제공합니다(이 데이터의 출력에 필요한 위젯도 제공). 이 기능 역시 디폴트로 활성화되어 있습니다.

검색 관련 설정

두번 째 탭인 “Search” 탭에서는 검색과 관련한 각종 설정들을 할 수 있습니다. 검색 결과 페이지에 표시될 개수나 검색에 포함시킬 포스트 유형(post type)을 지정할 수 있고, 검색 방식을 조정하거나 불용어(stopwords)를 등록할 수도 있습니다.

히트맵(Heatmap)

“Heatmap” 메뉴에서는 검색 결과에 인기검색어를 함께 출력할 수 있도록 해 줍니다. 이 기능은 앞서 “Seamless integration” 모드를 끈 경우만 작동합니다.

검색어 최소 글자수 조정

한 가지, 여기 설정 메뉴에 나와 있지는 않지만, 한국어 검색과 관련해서 유의할 점은 검색어(키워드)의 최소 글자수를 설정하는 부분입니다. 앞서 설명했듯 이 플러그인의 전문검색은 워드프레스 데이터베이스인 MySQL의 전문검색 기능을 사용하며, 별도 설정을 하지 않으면 MySQL에서 기본값으로 설정된 최소 글자수(3글자)를 따릅니다. 따라서 2음절 검색어(예를 들면, 앞서 소개한 ‘구글’ 같은 단어)를 입력하면 검색이 되질 않죠.

따라서 만약 2음절의 검색어에 대해서도 색인을 생성할 수 있도록 만들려면 MySQL에서 이 부분 설정값을 조정해 주어야 합니다.

설정은 간단합니다. MySQL 서버의 설정에서 다음과 같이 설정값을 조정해 준 다음 서버를 재시작시키면 됩니다.

[mysqld]
innodb_ft_min_token_size=2
ft_min_word_len=2

그런 다음, “Better Search > Tools” 메뉴로 와서 “Recreate Index” 버튼을 눌러 색인을 갱신하면 이제 2음절의 검색어도 색인에 등록이 되어 잘 검색될 것입니다.

좀 더 나은 검색 결과를 위하여

이것 말고도 워드프레스에는 검색 기능을 향상시킬 수 있는 다양한 플러그인들이 많이 나와 있습니다.

검색(Search) 플러그인

전문검색의 경우도, MySQL에서 제공하는 자체 전문검색 기능 외에도 별도 검색엔진을 이용한 다양한 검색 방법들이 있구요. 솔(Solr), 엘라스틱써치(Elasticsearch), 알고리아(Algolia) 같은.

물론 워드프레스는 이들 전문검색 엔진과도 잘 어울려 작동합니다.

일단 간단하고 저렴한 방법부터 시작하고 필요가 생기면 좀 더 전문적인 솔루션으로 확장해 나가는 것도 좋을 것 같습니다.

0 thoughts on “워드프레스에 전문검색(fulltext search) 추가하기”