1

私は問題を抱えています zend search lucence :

zend search lucence は、フィールドの ID を挿入した検索のヒット 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 に答える