1

我有问题 zend 搜索 lucence :

zend search lucence 返回搜索的命中 id 字段的 insted id。例如:

我在 Yii 控制器中有这个代码,用于创建新闻数据的索引:

       public function createNewsIndex()
 {

    setlocale(LC_CTYPE, 'de_DE.iso-8859-1');

    Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
    Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());



    $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles.'.news'), true);

    $news= News::model()->findAll();

    foreach ($news as $newsItem) {

        $news_doc=new Zend_Search_Lucene_Document();
        $news_doc->addField(Zend_Search_Lucene_Field::Text('id',CHtml::encode($newsItem->id),'utf-8'));
        $news_doc->addField(Zend_Search_Lucene_Field::Text('title',CHtml::encode($newsItem->title),'utf-8'));
        $news_doc->addField(Zend_Search_Lucene_Field::Text('keywords',CHtml::encode($newsItem->keywords),'utf-8'));
        $index->addDocument($news_doc);
    }

    $index->commit();
    $index->optimize();
  }

我有这个搜索新闻的代码:

     public function searchNews($term) {

    setlocale(LC_CTYPE, 'de_DE.iso-8859-1');

    Zend_Search_Lucene_Analysis_Analyzer_Common_TextNum_CaseInsensitive::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8());
    Zend_Search_Lucene_Analysis_Analyzer::setDefault(new Zend_Search_Lucene_Analysis_Analyzer_Common_Utf8_CaseInsensitive());


      try
    {
        $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles . '.news'));
    }
    catch(Zend_Search_Lucene_Exception $e)
    {
        $this->createNewsIndex();
        $index = new Zend_Search_Lucene(Yii::getPathOfAlias('application.' . $this->_indexFiles . '.news'));
    }

    $query = Zend_Search_Lucene_Search_QueryParser::parse($term);

    $results = $index->find($term . '*');
    $this->render('search', array(
            'results' => $results,
                )

        }

并查看此代码:

<?php foreach ($results as $result)
{    
 print "ID: " . $result->id . "\n";
 print "Score: " . $result->title . "\n<br>";
 print CHtml::link(CHtml::encode($result->title), array($controller.'/view', 'id'=>$result->id));
    }
    ?>

我希望 $result->id 是这个新闻标题的 id,但我认为这是一个命中 ID,我认为这是一个测试 Aht ID。根据此链接点击查找功能:(请参阅查找功能) http://phpcrossref.com/zendframework/library/Zend/Search/Lucene.php.html

抱歉英语不好。

4

1 回答 1

0

我通过重命名 id 字段名称来解决问题:

$news_doc->addField(Zend_Search_Lucene_Field::Text('news_id',CHtml::encode($newsItem->id),'utf-8'));

并认为:

<?php foreach ($results as $result)
{    
 print "ID: " . $result->news_id . "\n";
 print "Score: " . $result->title . "\n<br>";
 print CHtml::link(CHtml::encode($result->title), array($controller.'/view', 'id'=>$result->news_id));
    }
    ?>
于 2012-10-16T07:06:38.763 回答