【问题标题】:Using Zend_Search_Lucene fopen fails .fnm files使用 Zend_Search_Lucene fopen 失败 .fnm 文件
【发布时间】:2012-04-25 20:23:08
【问题描述】:

我在一个不基于 ZF 的独立项目中使用 Zend_Search_Lucene。我成功索引内容,并搜索它们,但问题是它无法创建 .fnm 文件

这是我正在使用的代码

Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8');
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());

$this->index = Zend_Search_Lucene::create(self::PATH_INDEX);

$doc = new Zend_Search_Lucene_Document();

$doc->addField(Zend_Search_Lucene_Field::keyword('id',$content['id'],'UTF-8'));
$doc->addField(Zend_Search_Lucene_Field::text('summary',$summary,'UTF-8'));
$doc->addField(Zend_Search_Lucene_Field::keyword('module',$module,'UTF-8'));

$this->index->addDocument($doc);

我也试过了

$doc->addField(Zend_Search_Lucene_Field::keyword('module',utf_encode($module),'UTF-8'));

我的内容是可搜索的,但我不知道为什么它不创建 fnm 文件,它会创建其余的文件,如 cfs 文件和 fdx、锁、段......等等,所以这不是目录或权限问题,问题在于我猜是锁。

这里是例外

Fatal error: Uncaught exception 'Zend_Search_Lucene_Exception' with message 'fopen(dict/_1.fnm): failed to open stream: No such file or directory' in Zend/Search/Lucene/Storage/File/Filesystem.php on line 67

Zend_Search_Lucene_Exception: fopen(dict/_1.fnm): failed to open stream: No such file or directory in Zend/Search/Lucene/Storage/File/Filesystem.php on line 67

Call Stack:
    0.0882    7819976   1. Zend_Search_Lucene_Proxy->__destruct() Zend/Search/Lucene/Proxy.php:0
    0.0882    7819976   2. Zend_Search_Lucene->removeReference() Zend/Search/Lucene/Proxy.php:63
    0.0882    7819976   3. Zend_Search_Lucene->_close() Zend/Search/Lucene.php:607
    0.0882    7819976   4. Zend_Search_Lucene->commit() Zend/Search/Lucene.php:569
    0.0882    7819976   5. Zend_Search_Lucene_Index_Writer->commit() Zend/Search/Lucene.php:1419
    0.0882    7819976   6. Zend_Search_Lucene_Index_SegmentWriter_DocumentWriter->close() Zend/Search/Lucene/Index/Writer.php:757
    0.0882    7819976   7. Zend_Search_Lucene_Index_SegmentWriter->_dumpFNM() Zend/Search/Lucene/Index/SegmentWriter/DocumentWriter.php:212
    0.0882    7820112   8. Zend_Search_Lucene_Storage_Directory_Filesystem->createFile(???) Zend/Search/Lucene/Index/SegmentWriter.php:280
    0.0882    7820912   9. Zend_Search_Lucene_Storage_File_Filesystem->__construct(???, ???) Zend/Search/Lucene/Storage/Directory/Filesystem.php:184

任何帮助将不胜感激

【问题讨论】:

  • 您是否有意遗漏了异常消息的其余部分?冒号fopen(indecies/_1.fnm):后面应该有相关文字说明fopen()为什么失败。
  • @MikeB 更新了堆栈跟踪
  • 如果有任何帮助,我已经在 Zend_Search_Lucene_Storage_File_Filesystem 中调试了创建文件的 __construct() 方法,它首先成功创建 _0.fnm,然后尝试创建 _1.fnm 并失败,尽管两者都在同一目录中,具有相同的模式“w+b”,但唯一的区别是文件名。 @MikeB
  • 您是否有机会打印该构造方法的参数并通过/失败?像$filename=dict/_0.fnm, $mode='r+b', success$filename=dict/_1.fnm, $mode='r+b', fail.. 我无法重新创建它,否则我会自己调试它。一旦将其确定为参数.. 尝试使用同一目录中的新文件自己执行此操作,该文件仅尝试执行<?php fopen('dict/_1.fnm', 'r+b'); 之类的操作。如果您可以将 Zend_Lucene 排除在外,并将问题缩小到一个简单的fopen() 电话,您将获得更多帮助。
  • 成功:$filename='dict/_0.fnm',$mode='w+b',失败:$filename='dict/_1.fnm',$mode='w+b ' @MikeB 我将使用相同的参数尝试 fopen,在创建 _1.fnm 及其相同的 rwx 之前,我还检查了 dict 的权限

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


【解决方案1】:

将目录设置为绝对目录后终于工作了。

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2015-01-08
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多