2015-03-03 3 views
0

Здравствуйте, я пытаюсь создать индекс Lucene. У меня проблема с индексом построения индекса на сервере, на localhost работает. Я нашел где-то, возможно, это проблема, потому что большое количество данных я не могу понять, почему. На сервере я меняю время max_execution и time_limit. Я называю этот методZend Lucene index

static public function indexSearchJedinice($params = null)  
{  
    $debug_file_path = 'c:/wamp/www/linkdl/debug/element.txt'; 
    $debug_file = fopen($debug_file_path, 'w'); 
    fwrite($debug_file, 'uso' ."\n"); 
     Zend_Search_Lucene_Search_QueryParser::setDefaultEncoding('utf-8'); 
    // Create index. Will delete any existing index. 
    $index = Zend_Search_Lucene::open('c:/wamp/www/linkdl/lucene/jedinice/'); 

    $sql = " 
      SELECT DISTINCT KNJ.ID, KNJ.Naziv, KNJ.Opis, KNJ.UID 
      FROM Kurs as K 
      LEFT JOIN KursPodaci as KP on K.ID = KP.IDKurs 
      INNER JOIN KursPripadaGrupi as KPG ON K.ID = KPG.IDKurs 
      INNER JOIN PodGrupa ON PodGrupa.ID = KPG.IDPodgrupa 
      INNER JOIN KursSadrziNastavneModule ON KursSadrziNastavneModule.IDKurs = K.ID 
      INNER JOIN KursModulSadrziJedinicu on KursModulSadrziJedinicu.IDKursNastavniModul = KursSadrziNastavneModule.IDKursNastavniModul 
      INNER JOIN KursNastavnaJedinica as KNJ ON KNJ.ID = KursModulSadrziJedinicu.IDKursNastavnaJedinica 

      WHERE K.ProdajniStatus IN (0,1) 
      AND KPG.IDCenovnikTip = 2 
      AND KNJ.JeZaPrikazivanje = 0 
      "; 



    //fwrite($debug_file, $sql ."\n"); 
    if ($jedinice = Db::getResult($sql)) 
    { 
     foreach ($jedinice as $jedinica) 
     { 
      //fwrite($debug_file, $jedinica['Naziv'] ."\n"); 
      $doc = new Zend_Search_Lucene_Document(); 
      $doc->addField(Zend_Search_Lucene_Field::UnIndexed('ID', $jedinica['ID'])); 
      $doc->addField(Zend_Search_Lucene_Field::Text('Naziv', $jedinica['Naziv'], 'utf-8')); 
      $doc->addField(Zend_Search_Lucene_Field::UnStored('Opis', $jedinica['Opis'], 'utf-8')); 
      //$doc->addField(Zend_Search_Lucene_Field::UnStored('Opis', '', 'utf-8')); 
      $doc->addField(Zend_Search_Lucene_Field::UnIndexed('UID', $jedinica['UID'])); 
      $doc->addField(Zend_Search_Lucene_Field::UnIndexed('Type', 'jedinica')); 

      $kratki_tekst = str_replace(' ', '', str_replace('U izradi', '', strip_tags($jedinica['Opis']))); 
      $kratki_tekst = create_short_text($kratki_tekst, 475); 

      $doc->addField(Zend_Search_Lucene_Field::UnIndexed('KratkiOpis', $kratki_tekst, 'utf-8')); 

      $index->addDocument($doc); 

      /** 
      * Optimizacija indeksiranja 
      */ 
      unset($doc); 


     } 
    } 
    fwrite($debug_file, 'Optimizacija pocinje' ."\n"); 
    $index->commit(); 
    $index->optimize(); 
    fwrite($debug_file, 'Optimizacija zabrsena' ."\n"); 
    return true; 
} 

Может кто-нибудь помочь мне понять разницу между открытием/и созданием. И эти опции UnIndexed, UnStored, Текст

ответ

0

Create построит новый индекс Zend Lucene в первый раз и после создания индекса, если необходимо возобновить существующий индекс для манипулирования данных в него, используйте open. Refer

Я использовал следующий код в моей реализации, и он отлично работает: Сначала он попытается открыть индекс, если индекс не будет доступен, тогда он создаст новый индекс.

try { 
    $index = Zend_Search_Lucene::open("indexName"); 
} catch(Exception $e) { 
    $index = Zend_Search_Lucene::create("indexName"); 
} 

Что касается типов полей см this

И да, есть предел для хранения данных в индекс. Для 32 бит платформ 2 GB. Для более крупных индексов используйте 64-разрядные платформы. Source

Смежные вопросы