zend框架中的lucene编码问题

时间:2011-04-29 16:44:29

标签: zend-framework encoding indexing lucene

我使用lucene搜索索引器。

它适用于英语,但我在我的网站中使用波斯语并且它不能为这种语言编制索引

例如“سلام”

我将此代码用于创建文档:

public function __construct($class, $key, $title,$contents, $summary, $createdBy, $dateCreated)
    {
        $this->addField(Zend_Search_Lucene_Field::Keyword('docRef', "$class:$key"));
        $this->addField(Zend_Search_Lucene_Field::UnIndexed('class', $class));
        $this->addField(Zend_Search_Lucene_Field::UnIndexed('key', $key));
        $this->addField(Zend_Search_Lucene_Field::Keyword('title', $title ,'utf-8'));
        $this->addField(Zend_Search_Lucene_Field::unStored('contents', $contents , 'UTF-8'));
        $this->addField(Zend_Search_Lucene_Field::text('summary', $summary , 'UTF-8'));
        $this->addField(Zend_Search_Lucene_Field::Keyword('dateCreated', $dateCreated));
    }

2 个答案:

答案 0 :(得分:6)

添加此(最佳位置引导程序)

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

答案 1 :(得分:1)

我遇到了@afsane报告的同样问题,然后我尝试了@ArneRie提供的解决方案。它确实解决了我的问题,但经过一些测试我发现不需要第一行(至少在我当前的设置中)。

因此,对我有用的解决方案是在创建索引之前显式设置默认分析器:

Zend_Search_Lucene_Analysis_Analyzer::setDefault(
    new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());
$index = Zend_Search_Lucene::create('/path/to/my/index');

在打开查询索引之前,我不需要显式设置默认分析器。