我在Symfony2应用程序中有Zend_Search_Lucene的实现。我正在使用Zend 1.11。索引似乎正在创建,我有几个文件包括:
_0.cfs
optimization.lock.file
read-lock-processing.lock.file
read.lock.file
segments_2
segments.gen
write.lock.file
这是我在控制器中的PHP代码
$index = \Zend_Search_Lucene::create(__DIR__.'/../../../../data/index');
$doc = new \Zend_Search_Lucene_Document();
$doc->addField(\Zend_Search_Lucene_Field::unIndexed('title', 'Symfony2') );
$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'cat dog') );
$index->addDocument($doc);
$index = \Zend_Search_Lucene::open(__DIR__.'/../../../../data/index');
$term = new \Zend_Search_Lucene_Index_Term("dog");
$query = new \Zend_Search_Lucene_Search_Query_Term($term);
$results = $index->find($query);
try {
$results = $index->find($query);
}
catch (\Zend_Search_Lucene_Exception $ex) {
$results = array();
var_dump($ex);
}
foreach ( $results as $result ) {
echo $result->score, ' :: ', $result->title, "n";
}
var_dump($results);
exit;
当我运行脚本时,会创建索引文件,但只返回一个空数组,并打印出最后一个var_dump为
array(0) { }
首先,是否有人知道如何检查索引是否正确写入? 其次有谁知道为什么我的查询没有返回任何结果? 有人用Symfony2成功实现了Zend_Search_Lucene吗?我已经尝试了Lidaa Search和EWZ捆绑包,但似乎都没有用。
我昨天整天都在努力解决这个问题而没有任何快乐,所以任何帮助都会非常感激。
$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'dog', 'utf-8') );
但是,我仍然无法检索任何结果。我认为这可能与语言环境设置有关,但我已经明确地设置了这样:
setlocale(LC_ALL, 'en_UK.utf-8');
ini_set('intl.default_locale', 'en-UK');
此外,如果我尝试将查询字符串解析为utf-8,则脚本会挂起并超时
$queryStr = $_GET['query'];
$query = \Zend_Search_Lucene_Search_QueryParser::parse($queryStr, 'utf-8');
任何人都知道为什么这不适用于我的Mac?
答案 0 :(得分:2)
Yeehaa!我将MAMP重新安装到版本2.0.3和Boom!有用。我觉得这与默认的语言环境或编码有关,但不确定是什么。如果有人知道为什么版本2.0 MAMP有错误,请告诉我们。
干杯 帕特里克
答案 1 :(得分:0)
您似乎错过了提交。
$doc->addField(\Zend_Search_Lucene_Field::text('contents', 'cat dog') );
$index->addDocument($doc);
$index->commit(); //Try adding this line
$index = \Zend_Search_Lucene::open(__DIR__.'/../../../../data/index');