如何使用Zend Lucene搜索邮编?

问题描述:

我用这个来创建索引与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

我相信你的问题是Analyzer。 我建议您使用Zend_Search_Lucene_Field::Keyword, 代替邮政编码字段的Zend_Search_Lucene_Field::Unstored。 这样,Lucene分析器在索引时不会修改邮政编码。 Java Lucene有explain()可用于调试搜索。 您可能需要打印一些临时值来模拟explain(),并查看这是否确实是问题。

我相信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

如果您正在寻找123,你会得到123以及34123例如全部命中。所以你必须确保你是索引并且你的查询字符串是明确的。

我建议将邮编索引为一个字符串,如“000123”。之后,您可以使用“000123”在索引上进行搜索,并且您将得到正确的结果集,而不是像34123那样。您只需将邮政编码翻译为“正确”的查询字符串。