【问题标题】:How do you search zipcodes using Zend Lucene?如何使用 Zend Lucene 搜索邮政编码?
【发布时间】:2009-05-31 13:41:03
【问题描述】:

我有非常简单的 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 按邮政编码搜索是很常见的。

【问题讨论】:

  • 索引看起来不错。您能发布您的搜索查询吗?

标签: php zend-framework symfony1 lucene zend-search-lucene


【解决方案1】:

我相信 Zend Lucene 的默认文本分析器默认不搜索数字。 Zend 附带了几个不同的文本分析器。使用 TextNum 分析器搜索数字和字符。在 zend/search/lucene/analysis/analyzer/common 文件夹中还有一些您可能会发现有用的其他分析器。

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

Zend_Search_Lucene_Analysis_Analyzer::setDefault( 新 Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());

【讨论】:

  • 另请注意,如果您更改分析器,则需要重建索引。如果您使用一种分析仪编制索引并使用另一种分析仪进行搜索,则会得到错误的结果。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多