你如何使用Zend Lucene搜索zipcodes?

时间:2009-05-31 13:41:04

标签: php zend-framework symfony1 lucene zend-search-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 Search索引整数是否存在问题?如果s / o可以解释一些有经验的人,请帮助我。我只能想象使用Lucene来搜索zipcode很常见。

3 个答案:

答案 0 :(得分:3)

我相信Zend Lucene的默认文本Analyzer默认不搜索数字。 Zend包含几种不同的文本分析器。使用TextNum分析器搜索数字和字符。 zend / search / lucene / analysis / analyzer / common文件夹中还有一些其他分析器可供您使用。

您可以使用以下代码更改默认分析器:

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您正在搜索123,那么您将获得123次以及34123次的所有点击。所以你必须确保你是索引,你的查询字符串是明确的。

我建议将邮政编码索引为字符串,例如“000123”。之后,您可以使用“000123”搜索索引,您将获得正确的结果集,而不是像34123那样。您只需要将zipcode转换为“正确的”查询字符串。