Zend Lucene index

0

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

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;
}

Может кто-то помочь мне понять разницу между open/и create. И это опции UnIndexed, UnStored, Text

Теги:
zend-framework

1 ответ

0

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню