zend搜索lucene返回搜索id而不是字段id

时间:2012-10-15 17:59:48

标签: facebook

我有poblem zend搜索lucence:

zend search lucence返回命中搜索的id id of field.for例如:

我在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-&gt; id是这个新闻标题的id,但我认为这是一个热门ID,我认为这是一个测试Aht ID。按此链接命中查找功能:(参见查找功能) http://phpcrossref.com/zendframework/library/Zend/Search/Lucene.php.html

抱歉英语不好。

1 个答案:

答案 0 :(得分: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));
    }
    ?>