RSS Feed

実験的に開発した小さなプログラムやWebサービスを公開。また、気になった最新IT技術情報をブログ形式でメモ。

Lucene(Feed)

Zend Frameworkに付属するデモ:
LuceneをつかってFeedからインデックス作成と検索を行うサンプル

Luceneをサポートするクラス ”Zend/Search/Lucene.php” を利用して、Feedからインデックス作成と検索を実現するサンプルコード。

動作サンプル : なし

ソース: /demos/Zend/Search/Lucene/feed-search/create-index.php

  1. < ?php
  2. require_once 'Zend/Feed.php';
  3. require_once 'Zend/Search/Lucene.php';
  4.  
  5. //create the index
  6. $index = new Zend_Search_Lucene('/tmp/feeds_index', true);
  7.  
  8. // index each item
  9. $rss = Zend_Feed::import('http://feeds.feedburner.com/ZendDeveloperZone');
  10.  
  11. foreach ($rss->items as $item) {
  12.     $doc = new Zend_Search_Lucene_Document();
  13.  
  14.     if ($item->link && $item->title && $item->description) {
  15.  
  16.         $link = htmlentities(strip_tags( $item->link() ));
  17.         $doc->addField(Zend_Search_Lucene_Field::UnIndexed('link', $link));
  18.  
  19.         $title = htmlentities(strip_tags( $item->title() ));
  20.         $doc->addField(Zend_Search_Lucene_Field::Text('title', $title));
  21.  
  22.         $contents = htmlentities(strip_tags( $item->description() ));
  23.         $doc->addField(Zend_Search_Lucene_Field::Text('contents', $contents));
  24.  
  25.         echo "Adding {$item->title()}...
  26. ";
  27.         $index->addDocument($doc);
  28.     }
  29. }
  30.  
  31. $index->commit();

ソース: /demos/Zend/Search/Lucene/feed-search/search-index.php

  1. < ?php
  2. require_once 'Zend/Search/Lucene.php';
  3.  
  4. $index = new Zend_Search_Lucene('/tmp/feeds_index');
  5. echo "Index contains {$index->count()} documents.
  6. ";
  7.  
  8. $search = 'php';
  9. $hits   = $index->find(strtolower($search));
  10. echo "Search for "$search" returned " .count($hits). " hits.
  11.  
  12. ";
  13.  
  14. foreach ($hits as $hit) {
  15.     echo str_repeat('-', 80) . "
  16. ";
  17.     echo 'ID:    ' . $hit->id                     ."
  18. ";
  19.     echo 'Score: ' . sprintf('%.2f', $hit->score) ."
  20.  
  21. ";
  22.  
  23.     foreach ($hit->getDocument()->getFieldNames() as $field) {
  24.         echo "$field:
  25. ";
  26.         echo '    ' . trim(substr($hit->$field,0,76)) . "
  27. ";
  28.     }
  29. }
関連記事