기본 콘텐츠로 건너뛰기

Zend Framework 2에서 ZendSearch 모듈 사용하기



Zend Framework(ZF) 2에서는 ZF1과는 달리 Lucene(루씬, 아파치 재단의 오픈소스 검색 엔진)을 사용할 수 있는 ZendSearch(ZF1에서는 Zend_Search) 모듈이 기본 패키지에 포함되어 있지 않습니다. 아마도 개발 진행이 RC 버전(2.0.0rc5)에서 멈춰저 있기 때문인 것 같은데 ZF2에서 ZendSearch 모듈을 설치해 사용하는 방법을 알아보겠습니다.

composer를 통해 설치하기 위해 프로젝트 루트 디렉토리에 있는 composer.json에 다음을 추가합니다.

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/zendframework/ZendSearch"
    }
],
"prefer-stable": true,
"minimum-stability": "dev"

위에서 이야기한 것처럼 ZF2 기본 패키지에 포함되어 있지 않기 때문에 별도 저장소를 추가하고 아직은 개발 버전이기에 개발 버전도 사용한다라는 것을 지정합니다.

그리고, 다음 명령을 실행합니다.

composer require zendframework/zendsearch:dev-master

여기서는 설치 버전을 지정하는 맨 마지막의 'dev-master'가 중요합니다. 'dev-master'를 지정하지 않고 현재 릴리즈된 마지막 버전인 2.0.0rc5를 사용하기 위해 '2.0.*'와 같은 형태로 지정하면 2.0.0rc5 버전의 ZF2가 같이 설치됩니다.

이것은 마지막으로 릴리즈된 ZendSearch 2.0.0rc5 버전의 composer.json에서 요구된 ZF2 버전이 'self.version'로 되어 있기 때문입니다. ZendSearch 저장소 페이지에 들어가 보면 이 부분을 '2.*'로 수정하였다라고 되어 있는데 수정만 해놓고 릴리즈를 하지 않아서 ZF2가 같이 설치되고 있는 것입니다.

이 문제를 피하기 위해서 릴리즈 버전이 아니라 개발 메인 브랜치를 사용하겠다라고 지정하는 것입니다.

모듈 설치후 테스트를 해보아야 하는데 ZF1과는 달리 기본 패키지가 아니라서 공식 레퍼런스 문서에는 ZendSearch관련 문서는 없습니다. 테스트는 ZF1에 있는 Zend_Search 문서와 설치된 ZendSearch 모듈 디렉토리에 있는 테스트 코드들을 참조하여야 합니다. 간단한 인덱스 생성과 검색 예제를 첨부합니다.


[ 인덱스 생성 ]

use ZendSearch\Lucene;
use ZendSearch\Lucene\Document;
use ZendSearch\Lucene\Index;
use ZendSearch\Lucene\Analysis\Analyzer\Analyzer;
use ZendSearch\Lucene\Analysis\Analyzer\Common\Utf8; 
Analyzer::setDefault(new Utf8());
$index = Lucene\Lucene::create('인덱스 디렉토리');
$doc = new Document(); 
$doc->addField(Document\Field::Text('url', '웹페이지 주소'));
$doc->addField(Document\Field::UnStored('contents', "내용")); 
$index->addDocument($doc);


[ 검색 ]

use ZendSearch\Lucene;
use ZendSearch\Lucene\Search;
use ZendSearch\Lucene\Search\Query;
use ZendSearch\Lucene\Document;
use ZendSearch\Lucene\Analysis\Analyzer\Analyzer;
use ZendSearch\Lucene\Analysis\Analyzer\Common\Utf8; 
Lucene\Lucene::setDefaultSearchField('contents');
Analyzer::setDefault(new Utf8()); 
$index = Lucene\Lucene::open('인덱스 디렉토리');
$query = Search\QueryParser::parse('키워드'); 
$hits = $index->find($query);
foreach ($hits as $hit) {
    echo $hit->url;
}


===


사진 포트폴리오 - City, City People (http://photo.just4fun.kr/)

사진 매거진 앱 - Viewzin (http://viewzin.just4fun.kr/)



댓글

이 블로그의 인기 게시물

PHP에서 보안 문제를 해결하는 법

한빛미디어 홈페이지에 'PHP에서 보안 문제를 해결하는 법' 이라는 기사가 있습니다. PHP로 개발시 주의해야하는 3가지 보안 문제와 이를 막는 방법에 대한 외국 기사를 번역한 기사인데 관련 사항을 잘모르시는 분들에게 도움이 될 것 같아 기사에 소개된 내용들에 제 생각을 추가하여 정리해보겠습니다.


Android Studio 3.0에서 메소드 파라미터 힌트 기능 끄기

Android Studio를 3.0으로 업데이트하고 살펴보고 있었는데 에디터가 뭔가 지저분해(?) 보였습니다. 소스를 자세히 보니 아래와 같이 이전 버전에서는 없었던 텍스트가 보였습니다.


파일 관리자 (Clean File Manager) : 깔끔한 안드로이드 파일 관리 앱

안드로이드의 파일 관리 앱으로는 '아스트로 파일 관리자'나 'ES 파일 탐색기'가 유명한데 이 앱들은 저에게는 너무 번잡한 앱들입니다. 파일 관리라는 단순한 기능이 필요한 저로서는 너무 많은 기능을 가지고 있어 무겁고 인터페이스도 어색한 앱들이어서 대안을 찾다가 괜찮은 앱이 있어 소개합니다.

'파일 관리자 (Clean File Manager)'는 위 두 앱들에 비해 기본에 충실한 앱입니다. 클라우드 서비스를 지원하지도 않고 PC 접속 기능도 없습니다. 파일 관리를 제외한 기능으로는 설치된 앱 목록을 표시해주는 기능이 거의 유일한 부가 기능입니다. 그러나, 저처럼 단순한 파일 관리 앱을 원하는 사람에게는 딱인 앱이죠.