RSS Feed

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

Lucene(Html)

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

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

動作サンプル : なし

ソース: /demos/Zend/Search/Lucene/indexing/CreateIndex.php

  1. < ?php
  2. /**
  3. * @package ZSearch
  4. * @subpackage demo
  5. */
  6.  
  7. /** Zend_Search_Lucene */
  8. require_once 'Zend/Search/Lucene.php';
  9.  
  10.  
  11.  
  12. class FileDocument extends Zend_Search_Lucene_Document
  13. {
  14.     /**
  15.      * Object constructor
  16.      *
  17.      * @param string $fileName
  18.      * @param boolean $storeContent
  19.      * @throws Zend_Search_Lucene_Exception
  20.      */
  21.     public function __construct($fileName, $storeContent = false)
  22.     {
  23.         if (!file_exists($fileName)) {
  24.             throw new Zend_Search_Lucene_Exception("File doesn't exists. Filename: '$fileName'");
  25.         }
  26.         $this->addField(Zend_Search_Lucene_Field::Text('path', $fileName));
  27.         $this->addField(Zend_Search_Lucene_Field::Keyword( 'modified', filemtime($fileName) ));
  28.  
  29.         $f = fopen($fileName,'rb');
  30.         $byteCount = filesize($fileName);
  31.  
  32.         $data = '';
  33.         while ( $byteCount > 0 && ($nextBlock = fread($f, $byteCount)) != false ) {
  34.             $data .= $nextBlock;
  35.             $byteCount -= strlen($nextBlock);
  36.         }
  37.         fclose($f);
  38.  
  39.         if ($storeContent) {
  40.             $this->addField(Zend_Search_Lucene_Field::Text('contents', $data));
  41.         } else {
  42.             $this->addField(Zend_Search_Lucene_Field::UnStored('contents', $data));
  43.         }
  44.     }
  45. }
  46.  
  47.  
  48. // Create index
  49. $index = new Zend_Search_Lucene('index', true);
  50. // Uncomment next line if you want to have case sensitive index
  51. // ZSearchAnalyzer::setDefault(new ZSearchTextAnalyzer());
  52.  
  53. setlocale(LC_CTYPE, 'en_US.ISO8859-1');
  54.  
  55. $indexSourceDir = 'IndexSource';
  56. $dir = opendir($indexSourceDir);
  57. while (($file = readdir($dir)) !== false) {
  58.     if (is_dir($indexSourceDir . '/' . $file)) {
  59.         continue;
  60.     }
  61.     if (strcasecmp(substr($file, strlen($file)-5), '.html') != 0) {
  62.         continue;
  63.     }
  64.  
  65.     // Create new Document from a file
  66.     $doc = new FileDocument($indexSourceDir . '/' . $file, true);
  67.     // Add document to the index
  68.     $index->addDocument($doc);
  69.  
  70.     echo $file . "...
  71. ";
  72.     flush();
  73. }
  74. closedir($dir);
関連記事