CJK 검색에 어울리는 fulltext 검색엔진 Mroonga를 테스트 해봤습니다.
서버 테스트를 진행하고 있다보니 이것저것 만져보고 있네요.
CentOS7 에 MariaDB.repo를 등록하여 MariaDB 최신 버젼을 설치했습니다.
/etc/yum.repos.d/MariaDB.repo
gpgcheck=1
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/rhel7-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
MariaDB를 처음 사용하다보니 블로그 등의 글을 읽다가 우연히 아래 링크된 글을 보고
한글에 특화된 전문검색엔진이란 말에 시간나면 꼭 테스트 해보자고 생각했었네요
http://kakaodbe.blogspot.kr/2013/09/fulltext-search-mroonga.html
아래 블로그에서 MariaDB 10.0.15부터는 Mroonga 가 기본적으로 포함되어 있다는 내용을 보고 테스트 진행했네요.
http://mudchobo.tistory.com/553
MySQL에 접속 쿼리 하나로 사용 할 수 있는 환경이 되어버리네요.
사용 버젼은 MariaDB-server-10.0.17-1.el7.centos.x86_64
//////////// 엔진 활성화
MariaDB [(none)]> INSTALL SONAME 'ha_mroonga';
Query OK, 0 rows ..
MariaDB [(none)]>show engines;
....
Mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO
.....
//////////// 테스트
기존에 사용중인 테이블 하나를 phpMyAdmin를 이용하여 변경해봤습니다.
- 엔진변경
테이블 작업 > 테이블 옵션
테이블 설명 : engine "InnoDB"
스토리지 엔진: Mroonga
- 인덱스
인덱스 > 1개 열 인덱스 말들기 실행
인덱스 이름 : wr_content
옵션>
설명: parser "TokenBigramIgnoreBlankSplitSymbolAlphaDigit"
실행
쉽게 변경되네요.
Mroonga엔진은 테이블의 COMMENT, Fulltext COMMENT 내용을 옵션으로 사용하네요.
위에 테이블 설명 부분은 InnoDB를 기본으로 사용하면서 FullText만 Mroonga를 사용하기 위해서였는데
실제 phpMyAdmin에서는 적용되지 않더라구요.
간단한 테스트를 끝내고
테이블을 생성 할 때 엔진 옵션 코멘트에 해당 부분을 추가했더니 데이타는 InnoDB에 인덱스는 Mroonga에 분리되네요.
아래 링크에 Parser 선택에 대한 글을 추가합니다.
http://blog.mandeulgo.net/2014/01/15/mroonga-performance-test/
-------------------
1차 테스트는 자료가 6만건이라 별 의미가 없더군요.
2차 테스트로 60만건 텍스트로 2Gb 정도로 건수에비해 데이타 크기는 좀 있는 편입니다.
아래의 검색 테스트를 보면 한글 형태소 분해가 되고 있고 한글 쪼개기 등의 작업을 하지않아도
검색이 잘 된다는 걸 알 수 있습니다.
여유되시면 테스트 해보세요.
형태소 분석을 어떻게 하는지는 좀 더 글들을 읽어봐야 알 것 같네요.
---
MariaDB [sbtest]> set names euckr;
1 row in set (0.70 sec)
MariaDB [sbtest]> select count(*) from hd_write_board1 where match(wr_content) against('호자') limit 0,1;
+----------+
| count(*) |
+----------+
| 708 |
+----------+
1 row in set (0.09 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('후기남겨달라는');
+-----+
| b |
+-----+
| 279 |
+-----+
1 row in set (0.23 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('후기남겨달라는' in boolean mode);
+---+
| b |
+---+
| 2 |
+---+
1 row in set (0.20 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('후기남달라는');
+-----+
| b |
+-----+
| 248 |
+-----+
1 row in set (0.25 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('후기남달라는' in boolean mode);
+---+
| b |
+---+
| 0 |
+---+
1 row in set (0.01 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('남겨달라는' in boolean mode);
+----+
| b |
+----+
| 14 |
+----+
1 row in set (0.01 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('겨달라는' in boolean mode);
+----+
| b |
+----+
| 19 |
+----+
1 row in set (0.20 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('남겨달라는');
+-----+
| b |
+-----+
| 279 |
+-----+
1 row in set (0.01 sec)
MariaDB [sbtest]> select count(*)as b from hd_write_board1 where match(wr_content) against('남겨 달라는' in boolean mode);
+------+
| b |
+------+
| 7181 |
+------+
1 row in set (0.70 sec)
댓글 1개
좋은정보 감사합니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 8265 | |
| 20403 | |
| 20402 | |
| 20401 | |
| 20400 |
웹서버
서버 동시접속자 설정 변경하기
|
| 8259 | |
| 20399 | |
| 20398 | |
| 8255 | |
| 8249 | |
| 8246 | |
| 8242 | |
| 20396 | |
| 8240 | |
| 20395 | |
| 20394 |
MySQL
테이블 복사 쿼리
|
| 31033 | |
| 28385 | |
| 20393 |
PHP
현재 접속중인 사용자 나타내기
|
| 28380 | |
| 20392 |
MySQL
mysql select 후 update 하기
|
| 28377 | |
| 20391 | |
| 20390 |
PHP
한글문자열 자르는 법 입니다.
|
| 20389 | |
| 20388 | |
| 20387 |
PHP
이메일주소 검사하기 입니다.
|
| 20386 | |
| 20385 | |
| 20384 |
node.js
Node js 게시판 프로젝트 소개합니다.
|
| 20383 |
PHP
pc 모바일 체크
1
|
| 20382 |
PHP
계정 사용량(용량) 확인
|
| 8238 | |
| 20380 | |
| 20379 |
MySQL
소수점 반올림 버림
|
| 28376 | |
| 28372 | |
| 20378 | |
| 20377 |
PHP
에러 로그파일 생성하기
|
| 8235 | |
| 20375 | |
| 20374 | |
| 20373 |
PHP
후이즈검색 하기 입니다.
|
| 20372 |
PHP
그래프 그리기 입니다.
|
| 20371 |
JavaScript
자바스크립트로 구현한 number_format() 입니다.
|
| 20370 |
JavaScript
금액 관련 숫자를 한글로 변환하기 입니다.
|
| 28370 | |
| 20369 |
PHP
PHP 날짜 계산 관련 함수
|
| 28366 | |
| 20368 |
jQuery
jQuery 1.x와 2.x 버전 동시에 사용하기
|
| 20367 | |
| 20366 | |
| 20365 |
JavaScript
사업자 등록번호 검사하기 입니다.
|
| 20364 | |
| 20363 |
JavaScript
항상 같은곳에 광고창 만들기 입니다.
|
| 20362 |
JavaScript
부메뉴 나오게 하기 입니다.
|
| 20361 |
JavaScript
특정문자 제거하기 입니다.
|
| 20360 |
JavaScript
휴대폰번호 검사 하기 입니다.
|
| 20359 |
JavaScript
이미지 좌우로 이동 갤러리 입니다.
|
| 8231 | |
| 20358 | |
| 20357 |
JavaScript
쉬운 replaceAll 입니다.
|
| 20356 | |
| 20355 | |
| 20354 | |
| 20353 | |
| 20352 |
JavaScript
콤보스타일 메뉴 입니다.
|
| 20351 |
JavaScript
쿠키를 이용한 레이어 공지창 입니다.
|
| 20350 |
JavaScript
효과있는 텍스트 틱커 입니다.
|
| 20349 | |
| 20348 |
PHP
HTTP 인증 하기 입니다.
|
| 20347 |
JavaScript
외부 문서 불러오기 입니다.
|
| 20346 |
JavaScript
지정한 날짜까지 New 이미지를 띄워주기 입니다.
|
| 20345 | |
| 20344 |
JavaScript
메일 주소 검사하기 체크박스 입니다.
|
| 20343 |
JavaScript
무단링크 금지하기 입니다.
|
| 20342 | |
| 20341 |
MySQL
DB백업 및 복원
|
| 20340 |
JavaScript
페이지가 다른 사이트의 프레임에 갇히는 것을 막기 입니다.
|
| 20339 | |
| 20338 | |
| 20337 |
jQuery
input text 대문자만 받는 Jquery
|
| 20336 | |
| 20335 |
JavaScript
이미지 업로드와 미리보기 입니다.
|
| 20334 |
JavaScript
배경음악 랜덤 재생 하기 입니다.
|
| 20333 |
JavaScript
css 지원 여부 확인해서 다른 페이지로 이동하기 입니다.
|
| 20332 |
JavaScript
하부메뉴가 보였다가 숨겨졌다 하는 토글버튼 입니다.
|
| 20331 |
JavaScript
개별 페이지에 인덱스로 거쳐 들어오게 하기 입니다.
|
| 20330 |
JavaScript
랜덤으로 이미지 출력 되기 입니다.
|
| 20329 |
JavaScript
사용자 해상도 알아내기 입니다.
|
| 20328 |
JavaScript
붙여넣기 금지하기 입니다.
|
| 20327 |
MySQL
대소문자 데이터 조회하기
|
| 20326 |
JavaScript
퇴장시 팝업창 한번한 띄우기 입니다.
|
| 20325 | |
| 20324 | |
| 20323 |
JavaScript
시도, 구군, 동 주소 select
|
| 20322 |
MySQL
커리로 DB 테이블 명세서 출력하기
|
| 20321 |
JavaScript
브라우저 해상도 구분없는 절대 x,y 좌표 값 구하기 입니다
|
| 20320 |
PHP
rss 읽어오기 입니다.
|
| 20319 |
JavaScript
자바스크립트로 Ajax 효과내기 입니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기