2009-05-31 6 views
2

Zend Lucene과 함께 색인을 생성하는 매우 간단한 회사 색인이 있습니다.Zend Lucene을 사용하여 zipcode를 어떻게 검색합니까?

// store company primary key to identify it in the search results 
$doc->addField(Zend_Search_Lucene_Field::Keyword('pk', $this->getId())); 

// index company fields 
$doc->addField(Zend_Search_Lucene_Field::Unstored('zipcode', $this->getZipcode(), 'utf-8')); 
$doc->addField(Zend_Search_Lucene_Field::Unstored('name', $this->getName(), 'utf-8')); 

회사 이름은 있지만 우편 번호는 검색 할 수 없습니다. Zend Lucene 검색 색인 정수에 문제가 있습니까? s/o가 경험이있는 사람들을 밝힐 수 있다면, 나를 도와주세요. Lucene을 사용하여 zipcode로 검색하는 것은 매우 일반적이라고 생각할 수 있습니다.

+0

색인 생성이 정상적으로 처리됩니다. 검색어를 게시 할 수 있습니까? –

답변

0

귀하의 문제는 Analyzer으로 생각됩니다. 우편 번호 입력란에 Zend_Search_Lucene_Field::Unstored 대신 Zend_Search_Lucene_Field::Keyword, 을 사용하는 것이 좋습니다. 이렇게하면 Lucene 분석기는 색인 생성 중에 우편 번호를 수정하지 않습니다. Java Lucene에는 검색을 디버그하는 데 사용할 수있는 explain()이 있습니다. explain()을 시뮬레이트하고 실제로 이것이 문제인지 확인하기 위해 중간 값을 인쇄해야 할 수도 있습니다.

3

Zend Lucene의 기본 텍스트 분석기는 기본적으로 숫자를 검색하지 않습니다. Zend는 여러 텍스트 분석기와 함께 제공됩니다. 숫자와 문자를 모두 검색하려면 TextNum 분석기를 사용하십시오. 또한 유용한 zend/search/lucene/analysis/analyzer/common 폴더에 몇 가지 다른 분석기가 있습니다.

다음과 같은 코드를 사용하여 기본 분석기를 변경할 수 있습니다 : 당신이 123을 검색하는 경우

 
Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum()); 
+0

또한 분석기를 변경하면 색인을 다시 작성해야합니다. 하나의 분석기로 색인을 만들고 다른 분석기로 검색하면 잘못된 결과를 얻습니다. –

0

, 당신은 (123)뿐만 아니라, 예를 들어 34,123 모든 안타를 얻을 것이다. 따라서 인덱스와 쿼리 문자열이 모호하지 않은지 확인해야합니다.

우편 번호를 "000123"과 같은 문자열로 색인화하는 것이 좋습니다. 그 후에는 "000123"으로 색인을 검색 할 수 있으며 34123과 같은 올바른 결과 세트를 얻을 수 있습니다. 우편 번호를 "올바른"쿼리 문자열로 변환하기 만하면됩니다.

관련 문제