使用Zend_Search_Lucene搜索数字

5 php full-text-search zend-framework

那么为什么下面的第一个搜索示例没有返回结果呢?关于如何修改以下代码以进行数字搜索的任何想法都将非常感激.

创建索引

$index = new Zend_Search_Lucene('/myindex', true);
$doc->addField(Zend_Search_Lucene_Field::Text('ssn', '123-12-1234'));
$doc->addField(Zend_Search_Lucene_Field::Text('cats', 'Fluffy'));
$index->addDocument($doc);
$index->commit();
Run Code Online (Sandbox Code Playgroud)

搜索 - 没有结果

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('123-12-1234');
Run Code Online (Sandbox Code Playgroud)

搜索 - 结果

$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('Fluffy');
Run Code Online (Sandbox Code Playgroud)

Zor*_*che 2

这是您选择的分析器的效果。

我相信默认的分析器只会索引与 /[a-zA-Z]+/ 匹配的术语。这意味着您的 SSN 不会作为术语添加到索引中。

即使您切换到文本+数字不区分大小写的分析器,您想要的仍然无法工作。术语的表达式为 /[a-zA-Z0-9]+/ 这意味着添加到索引中的术语将为 12,123,1234。

如果您需要将 123-12-1234 视为有效术语,则可能需要扩展 Zend_Search_Lucene_Analysis_Analyzer_Common 并使 123-12-1234 成为一个术语。

请参阅 http://framework.zend.com/manual/en/zend.search.lucene.extending.html#zend.search.lucene.extending.analysis

您的另一个选择是将 ssn 存储为 Zend_Search_Lucene_Field::Keyword。由于关键字没有分解为术语。

http://framework.zend.com/manual/en/zend.search.lucene.html#zend.search.lucene.index-creation.understanding-field-types