기본 콘텐츠로 건너뛰기

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/)



이 블로그의 인기 게시물

구글 결제에서 결제 수단 등록 문제

얼마 전 카드를 새로 만들어서 구글 결제의 결제 수단을 교체하려고 하였는데 카드 번호가 잘못되었다라고 하면서 등록이 되지 않았습니다. 관련해서 검색을 해보니 이런 문제가 흔히 발생하고 있더군요. 저처럼 당황하실 분들을 위해 구글 고객센터와 통화해 해결하면서 알아낸 것들을 공유하겠습니다.

넥서스 4 : 레퍼런스 그 이상의 폰

LTE 버전을 기대했는데 3G 폰으로 나와 고민을 하게 한 넥서스4(넥포). 기존에 사용하던 넥서스S(넥스)가 이젠 성능의 한계를 확실하게 보여주고 있어 다음 넥서스폰은 LTE로 나올 것을 기대하면 1년 정도 사용할 생각으로 구입했습니다. 지난 주 월요일에 받아 일주일 정도 사용해본 느낌을 정리해보겠습니다. 넥포의 스펙을 정리해 보면 아래와 같습니다. 4.7인치 화면 1280 x 768 해상도 8백만 화소 후면 카메라, 1.3백만 화소 전면 카메라 3G 모바일 네트워크 (HSPA+ 지원) 무선 충전 SlimPort HDMI 내장 저장공간 8G/16G 2G 메모리 퀄컴 스냅드래곤 S4 프로 (쿼드코어) 폰의 스펙은 LG 옵티머스G를 베이스로 만들어진 폰이라 현재 기준으로 부족한 점이 없습니다. 충분히 빠르고 충분히 여유롭게 안드로이드 4.2를 구동할 수 있는 폰이죠. 스펙에서 흥미로운 것은 무선 충전과 SlimPort HDMI 입니다. 무선충전은 WCP Qi 규격이라 아직 발매가 되지 않은 전용 충전기 이외에도 호환되는 제품으로는 충전이 된다고 하는데 7만원 정도에 호환 제품을 구매할 수 있더군요. SlimPort HDMI는 넥포의 마이크로 USB 포트에 어댑터를 연결해 HDMI 출력을 지원하는 것입니다. 넥스를 사용하다 넥포를 사용하면서 느껴지는 것은 당연히 빠르다입니다. 안드로이드라는 플랫폼이 하드웨어 스펙은 'more and more' 불필요하다할 정도로 높은 것이 좋다라는 것을 다시 체감하는 순간이었습니다. 적어도 체감 성능면에서는 아이폰을 포함해 다른 폰에 밀릴 것이 없는 넥포입니다. 손에 잡히는 느낌은 처음에는 좋은 편이 아닙니다. 4.7인치라 화면이 큰 것도 있지만 뒷면까지 유리로 되어 있어 아이폰4를 처음 잡아보았을 때 느껴지는 손에 착 달라붙지 못하고 미끄러지는 듯한 느낌을 넥포에서도 느낄 수 있었습니다. 그나마 아이폰4와는 달리 테두리가 부드러운 재질이라 그립감에

레이저폰2 A/S 후기

내구성이 의심되었던 레이저폰2가 추석을 앞두고 문제가 생겨 A/S를 받았습니다. 이 폰을 지금 구입할 분들은 거의 없을 것 같지만 정보 공유 차원에서 간단한 A/S 후기를 올립니다.