那么为什么下面的第一个搜索示例没有返回结果呢?关于如何修改以下代码以进行数字搜索的任何想法都将非常受欢迎。
$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();
$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('123-12-1234');
$index = new Zend_Search_Lucene('/myindex', true);
$results = $index->find('Fluffy');
答案 0 :(得分:3)
首先,您需要更改文本分析器以包含数字
Zend_Search_Lucene_Analysis_Analyzer :: setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum());
然后,对于包含数字的字段,您要使用 Zend_Search_Lucene_Field :: Keyword 而不是 Zend_Search_Lucene_Field :: Text 这将跳过令牌的创建并将值“原样”保存到索引中。然后你可以搜索它。我不知道浮点数的行为(可能不适用于浮点数3.0不会匹配3)但是对于自然数字(如ids)来说就像一个魅力。
答案 1 :(得分:2)
这是您选择的分析器的效果。
我相信default Analyzer只能索引符合/ [a-zA-Z] + /的字词。这意味着您的SSN未作为术语添加到索引中。
即使你切换到文本+数字不区分大小写的分析器,你想要的仍然无法工作。术语的表达式为/ [a-zA-Z0-9] + /这意味着您添加到索引中的术语将为12,123,1234。
如果您需要将123-12-1234视为有效术语,您可能需要扩展Zend_Search_Lucene_Analysis_Analyzer_Common并使其成为123-12-1234的术语。
您的另一个选择是将ssn存储为Zend_Search_Lucene_Field :: Keyword。由于关键字不会分解为术语。