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(
    新 Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());
于 2009-07-20T22:57:45.750 回答
0

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

于 2009-06-01T09:49:26.870 回答
0

例如,如果您正在搜索 123,您将获得 123 和 34123 的所有命中。所以你必须确保你是索引并且你的查询字符串是明确的。

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

于 2011-04-05T12:47:21.190 回答