2009-05-31 7 views
2

私はインデックスを作成するためにこれを使用してのZend Luceneのと非常に簡単な会社のインデックスを持っている:Zend Luceneを使ってどのように郵便番号を検索しますか?

// 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を使って郵便番号で検索するのはかなり一般的です。

+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だけでなく、例えば34123とのすべてのヒットを取得します。したがって、あなたはインデックスであり、クエリ文字列は明白であることを確認する必要があります。

郵便番号を「000123」などの文字列としてインデックスすることをお勧めします。その後、 "000123"で索引を検索すると正しい結果セットが得られ、34123のようなものは得られません。郵便番号を "正しい"照会文字に変換するだけで済みます。

関連する問題