0

我有一个基于 Zend Search Lucene 构建的自定义搜索引擎。该程序应该以多种语言(目前为 11 种)从全球来源获取数据。我遵循了我发现的所有方法,以确保所有内容都以 UTF-8 编码。在我的 Lucene 索引中,有四个字段可能包含特殊字符,但我们主要处理的是标题和描述字段,目前这些字段非常失败。

在我的本地机器上,我正在运行 XAMPP 进行开发和测试。代码在这里完美运行。我能够毫无问题地索引英语、西班牙语、中文、俄语和其他语言的内容。我可以使用 Luke 来检查结果索引,它看起来很棒。

在具有相同代码的实时服务器上(我已经尝试删除并重新上传以确保),生成的索引在特殊字符上失败。即中文和俄文不索引任何字符。在西班牙语内容中,它会在第一个重音字符所在的位置被截断。看起来也许第一个多字节字符只是杀死了存储。但是文档仍然保存到索引中。其他没有特殊字符的字段正确保存。

这是代码的样子(例如简化):

$index = Zend_Search_Lucene::create(CF_INDEX_LOCATION);
Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8Num_CaseInsensitive());
$doc = new Zend_Search_Lucene_Document();
$doc->addField(Zend_Search_Lucene_Field::Text('title', $title));
$index->addDocument($doc);
$index->commit();
$index->optimize();

同样,这段代码加上 Zend 库在两种环境中都是相同的。本地实例会产生一个成功的索引,其中所有这些语言可以在同一个索引中共存,而无需使用不同的分析器。

这是服务器设置之间的比较:

  • 当地的
    • 阿帕奇版本:2.2.6
    • PHP版本:5.2.4
    • PHP 作为 Apache 模块运行
  • 居住
    • 阿帕奇版本:2.2.17
    • PHP版本:5.3.6
    • PHP 作为 FastCGI 运行

两台服务器都启用了 mbstring 多字节支持。我只是不确定还能看什么。CGI 与模块选项是否对此有影响?我需要比较任何其他设置吗?

4

0 回答 0