2

これを使用してインデックスを作成する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 Search の整数のインデックス作成に問題はありますか? s / oが経験した人に光を当てることができれば、私を助けてください. Lucene を使用して郵便番号で検索することはかなり一般的であることしか想像できません。

4

3 に答える 3

3

Zend Lucene のデフォルトのテキスト アナライザーは、デフォルトでは数値を検索しないと思います。Zend には、いくつかの異なるテキスト アナライザーがパッケージ化されています。TextNum アナライザーを使用して、数字と文字の両方を検索します。zend/search/lucene/analysis/analyzer/common フォルダーには、役立つと思われる他のアナライザーもいくつかあります。

次のコードを使用して、デフォルトのアナライザーを変更できます。

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());
于 2009-07-20T22:57:45.750 に答える
0

123を検索している場合、たとえば、123と34123のすべてのヒットを取得します。したがって、インデックスを作成し、クエリ文字列が明確であることを確認する必要があります。

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

于 2011-04-05T12:47:21.190 に答える
0

問題はAnalyzerにあると思います。郵便番号フィールドのZend_Search_Lucene_Field::Keyword代わりに、を使用することをお勧めします。Zend_Search_Lucene_Field::Unstoredこのようにして、Lucene アナライザーはインデックス作成中に郵便番号を変更しません。Java Lucene には、検索のデバッグに使用できるExplain()があります。Explain() をシミュレートするためにいくつかの中間値を出力し、これが実際に問題であるかどうかを確認する必要がある場合があります。

于 2009-06-01T09:49:26.870 に答える