2009-05-31 104 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搜索索引整數有問題嗎?如果可以擺脫一些有經驗的燈光,請幫助我。我只能想象使用Lucene通過郵編搜索很常見。

+0

索引看起來很好。您可以發佈您的搜索查詢嗎? – 2009-06-01 11:42:09

回答

0

我相信你的問題是Analyzer。 我建議您使用Zend_Search_Lucene_Field::Keyword, 代替郵政編碼字段的Zend_Search_Lucene_Field::Unstored。 這樣,Lucene分析器在索引時不會修改郵政編碼。 Java Lucene有explain()可用於調試搜索。 您可能需要打印一些臨時值來模擬explain(),並查看這是否確實是問題。

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()); 
+0

另請注意,如果更改分析儀,則需要重建索引。如果您使用一臺分析儀進行索引並用另一臺進行搜索,則會得到錯誤的結果 – 2011-04-15 12:39:59

0

如果您正在尋找123,你會得到123以及34123例如全部命中。所以你必須確保你是索引並且你的查詢字符串是明確的。

我建議將郵編索引爲一個字符串,如「000123」。之後,您可以使用「000123」在索引上進行搜索,並且您將得到正確的結果集,而不是像34123那樣。您只需將郵政編碼翻譯爲「正確」的查詢字符串。