origoni's Blog from Millky

origoni의 스프링 블로그 입니다.

[펌] 소규모 검색 플랫폼(nLucene)을 적용한 응용 서비스 구축

검색 성능 개선 프로젝트 - nLucene

apache+PHP+CUBRID+nLucene+XE가 포함된 인스톨러를 사용하여 신규 웹 서비스를 간편하게 구축할 수 있습니다.

XE nLucene Module을 사용하여 CUBRID +XE 기반의 웹 서비스에서 nLucene을 간편하게 적용할 수 있습니다.

CUBRID Migration Toolkit 을 사용하여 MySQL 기반 데이터를 간편하게 마이그레이션할 수 있습니다.

한달 간 무료로 제공하는 Linux 가상 서버 를 사용하여 충분히 테스트할 수 있습니다.

nLucene은 이런 웹 서비스에 적합합니다.

  • Document 데이터가 주로 저장되는 서비스
  • 검색 성능 및 검색 결과 품질이 중요한 서비스
  • 데이터가  100만건 이하인 소규모 서비스

nLucene은 이런 장점을 제공합니다.

  • DB LIKE 검색의 한계를 극복하는 검색 성능 제공
  • 한국어 형태소 분석에 따른 유의미한 검색 결과 제공
  • 검색어 가중치에 따라 중요 문서가 상위 노출
  • 실시간 인덱싱, 실시간 검색 가능
  • 비용 추가 없이 검색 엔진 적용 가능 
  • 다양한 검색어 입력 옵션 가능 

검색 응답 시간 비교 그래프

검색 결과 비교 테이블

검색어/항목

DB 검색 결과

nLucene 검색 결과

비고

응답시간
(검색어1)

4777.00ms

69.63ms

68.6배 향상

결과건수
(검색어1)

2

68

nLucene검색:

대소문자 구분X

상위 3건 제목
(검색어1)

spamfilter->금지 단어 등록시 hit NOT NULL 임에도 값이 입력되지 않아 발생하는 문제 개선.

 

CUBRID -> SELECT 쿼리 생성시 문제 발생 우려 되는 부분.

윈도우7+iis(7.5)+php5+cubridxe 설치 후에 초기하면에 빨간색 글들..

 

XE 파트너 소개 XE ...

 

Cubrid 에서 update 구문에click counter 적용

 

응답시간

(검색어2)

4305.56ms

79.65ms

54.0배 향상

결과건수

(검색어2)

95

141610

 

상위 3건 제목

(검색어2)

ONEONE 개인서버 홍보

 

[we-d.net] 무료 웹호스팅 제공 / 1차 입주자 받습니다.

 

Firebug로 debugPrint 로그를 어떻게 보는 건가요?

apache + php + mysql + Zend Optimizer + eAccelerator

 

1. PHP사용을 위한 윈도우2008 서버 구성

 

설치시 error 로그좀 봐주세요

nLucene검색:

검색어 가중치에 따라 노출 순위 결정

응답시간

(검색어3)

3906.33ms

52.47ms

74.4배 향상

결과건수

(검색어3)

20

18926

 

상위 3건 제목

(검색어3)

1.4.0.2 업데이트 후 게시판 검색 스크립트 에러

 

검색창에 글이 써져있고 누르면사라지게하는법없을까요?

 

검색통계 위젯을 설치하였는데

통합검색에서 검색어 입력 후 엔터를 치면 제목만 검색되는 것을 ...

 

통합검색 기능 문제

 

통합검색 확장판 - 나도 포털처럼 맞춤검색한다   

nLucene검색:

형태소 분석에 의해 ”통합”, “검색”, “통합검색

통합 검색이 포함된 문서를 모두 검색

 

이런 이벤트를 진행합니다.

  • 이벤트 명: "우리 검색, 빠르게 빠르게"
  • 이벤트 소개: 
    CUBRID+XE+nLucene을 사용하여 신규 서비스 오픈 또는 DB 전환을 고려하시는 분들이 테스트 수행할 수 있도록 Cafe 24의 Linux 가상 서버 호스팅 계정을 한달간 제공해드립니다.
  • 참가 일정: 10월 25일~11월 30일까지 진행합니다. 
  • 참가 신청: 
    cubrid_at_nhn.com으로 이메일 신청(DB 전환/신규 오픈할 서비스 URL 및 간단 소개)
    스터디 그룹, 커뮤니티 운영자는 반드시 이메일에 알려 주세요~  
  • 참가 미션: 테스트/서비스 적용하면서 겪었던 고통, 슬픔, 기쁨, 및 버그, 개선사항 등을 XE 게시판에 올려주세요.
  • 참가 혜택: 
    가상서버 퍼스트클래스 호스팅(http://www.cafe24.com/server/server_vs.php
    참가 미션을 수행하신 분들께는 게시판 포스팅 내용에 따라 상품을 배송해드립니다. 
    (후보: 고품격 머그컵, 고품격 필기도구 셋트, 수제 피자 기프티콘, 문화 상품권 등)

이런 문서들은 도움이 됩니다.


-------------------------------------------------------------------------------------------------------------------


http://cafe.naver.com/studycubrid/741


소규모 검색 플랫폼(nLucene)을 적용한 응용 서비스 구축


1. nLucene 소개

nLucene은 Apache Lucene을 기반으로 BLOC모듈과 함께 개발된 검색 플랫폼으로서, Korean Analyzer를 포함합니다.

아래 인덱스 생성 시간을 참고하면 아시겠지만, 소규모 서비스에 적합하며 서비스 운영에 영향을 주지 않으면서 검색 성능 및 품질을 향상시킬 수 있다는 장점이 있습니다.

1.1 nLucene 구조

nLucene은 색인을 담당하는 Index BLOC과 검색을 담당하는 Search BLOC으로 구성됩니다. 

  •  Index BLOC은 CUBRID 데이터베이스에서 일정 시간마다 색인 작업을 일괄적으로 수행.
  •  Search BLOC은 검색에 필요한 API를 담당. BLOC내 모듈로 개발되어 있고 검색에 필요한 메소드가 구현됨.  

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?xml:namespace prefix = o />

1.2 Apache Lucene 소개

nLucene 이 기반으로 하는 Apache Lucene은 문서 데이터(정형적 문서 데이터와 비정형적 문서 데이터)뿐만 아니라 DB형 데이터에 전문 검색(Full text search)을 수행하기 위한 라이브러리입니다. Apache Lucene은 검색 화면, 검색 결과 화면, 자료 수집 등과 같은 사용자 애플리케이션은 제공하지 않고 색인(Index), 검색(Search) 기능을 제공하는 라이브러리만을 제공하고 있습니다. (보다 자세한 정보는 http://lucene.apache.org 참고)

1.3 Korean Analyzer의 소개

nLucene에 포함된 Korean Analyzer는 색인과 검색 단계에서 입력 문자열을 형태소, 즉 의미 있는 색인 단위로 변환합니다.  

2. nLucene 특징과 장점

nLucence은 Document 데이터가 주로 저장되고, 검색 성능 및 검색 결과 품질이 중요한 소규모 서비스에 적합한 검색 플랫폼으로서, 다음의 장점을 제공합니다.

  • DB LIKE 검색의 한계를 극복하는 검색 성능 제공
  • 한국어 형태소 분석에 따른 유의미한 검색 결과 제공
  • 검색어 가중치에 따라 중요 문서가 상위 노출
    가중치= tf * idf
    tf(term frequency): 검색 단어가 해당 문서에서 출연된 빈도
    idf(inverse documnet frequency): 검색 단어가 모든 문서에서 출연된 빈도
    예 :
    하나의 문서에서 100개 단어 중 "java"라는 단어가 3번 출연: tf=3/100=0.03
    10000개의 문서에서 "java"가 출연한 문서가 1개: idf=log(전체문서개수/출연문서수)=4
    따라서 해당 문서의 가중치는 0,12
  • 실시간 인덱싱, 실시간 검색 가능
  • 비용 추가 없이 검색 엔진 적용 가능
  • XE+CUBRID 사용자를 위한 설치/설정 편의 기능 제공
  • 다양한 검색어 입력 옵션 가능
  •  검색 구분 검색어  검색 내용
     기본 OR 검색  CUBRID PHP  CUBRID OR PHP
     와일드 카드 검색 CUBR?D

     CUBRAD,  CUBRBD,  CUBRCD...

     CUBRD, CUBRID, CUBRIID

     Fuzzy 검색 cofee~  coffee

(보다 자세한 검색 방법은 http://lucene.apache.org/java/2_9_1/queryparsersyntax.html 을 참고)

3. nLucene 성능

3.1 DB 검색과 nLucene 검색 결과 비교

부하 서버가 웹/DB 서버로 5분 동안 1 user 환경에서 통합 검색(제목+문서)를 수행하는 테스트를 수행하였습니다.

(장비/DB 최적화 작업 수행X)

  • 서버 사양: CPU: Intel Xeon 2.33GHz 4core, Memory: 8GB
  • 소프트웨어 버전: CentOS64 bit, CUBRID 2008 R3.0, XE 1.4.4.1, PHP 5.3.3
  • 테스트 도구: nGrinder
  • DB 사이즈: 294714 records, 약 1GB
  • nLucene 인덱스 사이즈: 1.09GB
  • 검색어: 영문 대문자로 “CUBRID”, 영문 대문자로 “PHP”, 한글로 “통합검색”

테스트 결과 DB 검색에 비해 nLucene 검색 속도가 평균 65배 높았으며, 검색 품질도 향상되었음을 확인할 수 있습니다.

 

아래 테이블은 테스트 결과를 보다 상세하게 기록한 것입니다. 응답 시간 뿐 아니라 검색 결과 수, 상위 노출 순서를 고려할 때 nLucene 검색 품질이 뛰어나다는 것을 확인할 수 있습니다.<?xml:namespace prefix = o /><?xml:namespace prefix = o /><?xml:namespace prefix = o />

검색어/항목

DB 검색 결과

nLucene 검색 결과

비고

응답시간
(검색어1)

4777.00ms

69.63ms

68.6배 향상

결과건수
(검색어1)

2

68

nLucene검색:

대소문자 구분X

상위 3건 제목
(검색어1)

spamfilter->금지 단어 등록시 hit NOT NULL 임에도 값이 입력되지 않아 발생하는 문제 개선.

 

CUBRID -> SELECT 쿼리 생성시 문제 발생 우려 되는 부분.

윈도우7+iis(7.5)+php5+cubrid xe 설치 후에 초기하면에 빨간색 글들..

 

XE 파트너 소개 XE ...

 

Cubrid 에서 update 구문에 click counter 적용

 

응답시간

(검색어2)

4305.56ms

79.65ms

54.0배 향상

결과건수

(검색어2)

95

141610

 

상위 3건 제목

(검색어2)

ONEONE 개인서버 홍보

 

[we-d.net] 무료 웹호스팅 제공 / 1차 입주자 받습니다.

 

Firebug로 debugPrint 로그를 어떻게 보는 건가요?

apache + php + mysql + Zend Optimizer + eAccelerator

 

1. PHP사용을 위한 윈도우 2008 서버 구성

 

설치시 error 로그좀 봐주세요

nLucene검색:

검색어 가중치에 따라 노출 순위 결정

응답시간

(검색어3)

3906.33ms

52.47ms

74.4배 향상

결과건수

(검색어3)

20

18926

 

상위 3건 제목

(검색어3)

1.4.0.2 업데이트 후 게시판 검색 스크립트 에러

 

검색창에 글이 써져있고 누르면사라지게하는법없을까요?

 

검색통계 위젯을 설치하였는데

통합검색에서 검색어 입력 후 엔터를 치면 제목만 검색되는 것을 ...

 

통합검색 기능 문제

 

통합검색 확장판 - 나도 포털처럼 맞춤검색한다   

nLucene검색:

형태소 분석에 의해 ”통합”, “검색”, “통합검색

통합 검색이 포함된 문서를 모두

  <<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

3.2 데이터 증가에 따른 인덱스 시간 및 인덱스 사이즈

Document 수를 10만 단위로 일정하게 증가시키면서 한 대의 인덱스 모듈로 색인 파일 생성 시간을 측정한 결과 10만개 ~ 150만개 데이터를 인덱싱 하는데 걸린 시간이 약 3분 ~ 70분까지 거의 비례 증가 그래프를 보입니다. 물론, 이는 Document 내용과 크기에 따라 다를 수 있습니다.    

(테스트 도구: Grinder, 데이터베이스: CUBRID 208 R2.2)

3.3 데이터 증가에 따른 인덱스 사이즈

Document 수를 10만 단위로 일정하게 증가시키면서 생성된 인덱스 파일 사이즈를 측정한 결과, Document수 증가에 따라 인덱스 파일 사이즈 역시 비례적으로 증가하는 것을 확인할 수 있습니다.


3.4 데이터 증가에 따른 검색 응답 시간

가장 중요한 검색 응답 시간에 대한 테스트 결과입니다.

Document 수를 10만 단위로 일정하게 증가시키면서 쿼리 한 개의 검색 요청 TPS를 한 대의 검색 모듈에서 측정한 결과, Document가 10만 ~ 150만개까지 증가함에 따라 약 6000 ~ 4000 TPS까지 비례 감소하는 그래프를 보입니다. 그리고, 같은 조건에서 검색 쿼리가 2개인 경우에는 OR 조건에 따른 Boolean 쿼리 처리 시간 때문에 약 0.5 ~ 0.8 배 낮은 TPS를 보입니다.

4. nLucene과 CUBRID, 그리고 XE

CUBRID 기반의 웹 서비스에서 nLucene을 보다 쉽고 간편하게 적용할 수 있도록 CUBRID nLucene Pack을 기획하게 되었습니다. 1단계 작업에서는 국내 최다 사용자를 보유하고 있는 XE 패키지를 포함하여 Apache+PHP+CUBRID+nLucene+XE가 포함된 인스톨러를 10월 중에 배포하며, 사용자들은 이를 사용하여 CUBRID+nLucene+XE 기반의 서비스를 간편하게 구축할 수 있습니다.






 



back to top