tutorial sintaxis query example php mysql lucene zend-search-lucene

sintaxis - Indexación de grandes DB con Lucene/PHP



lucene tutorial (3)

Chaparrales de la tarde,

Intentando indexar una mesa con 1,7 millones de filas con el puerto Zend de Lucene. En pequeñas pruebas de unos pocos miles de filas funcionó perfectamente, pero tan pronto como intento subir las filas a unas pocas decenas de miles, se agota el tiempo. Obviamente, podría aumentar el tiempo que php permite ejecutar el script, pero al ver que 360 ​​segundos me dan ~ 10,000 filas, odiaría pensar cuántos segundos me tomaría hacer 1,7 millones.

También intenté hacer que el script se ejecutara unos miles, actualizar y luego ejecutar los siguientes miles, pero al hacerlo, se borra el índice cada vez.

¿Alguna idea, chicos?

Gracias :)


Intente acelerarlo seleccionando solo los campos que necesita de esa tabla.

Si esto es algo para ejecutar como cronjob, o un trabajador, entonces debe estar ejecutándose desde la CLI y para eso no veo por qué cambiar el tiempo de espera sería algo malo. Solo tienes que compilar el índice una vez. Después de eso, los nuevos registros o actualizaciones son solo pequeñas actualizaciones de su base de datos Lucene.


Algo de información para todos ustedes: publicación como respuesta para que pueda usar los estilos de código.

$sql = "SELECT id, company, psearch FROM businesses"; $result = $db->query($sql); // Run SQL $feeds = array(); $x = 0; while ( $record = $result->fetch_assoc() ) { $feeds[$x][''id''] = $record[''id'']; $feeds[$x][''company''] = $record[''company'']; $feeds[$x][''psearch''] = $record[''psearch'']; $x++; } //grab each feed foreach($feeds as $feed) { $doc = new Zend_Search_Lucene_Document(); $doc->addField(Zend_Search_Lucene_Field::UnIndexed(''id'', $feed["id"])); $doc->addField(Zend_Search_Lucene_Field::Text(''company'', $feed["company"])); $doc->addField(Zend_Search_Lucene_Field::Text(''psearch'', $feed["psearch"])); $doc->addField(Zend_Search_Lucene_Field::UnIndexed(''link'', ''http://www.google.com'')); //echo "Adding: ". $feed["company"] ."-".$feed[''pcode'']."/n"; $index->addDocument($doc); } $index->commit();

(He usado google.com como un enlace temporal)

El servidor en el que se ejecuta es una instalación local de Ubuntu 8.10, 3Gb RAM y un chip Dual Pentium 3.2GHz.


Lamento decirlo, porque el desarrollador de Zend_Search_Lucene es un amigo y ha trabajado muy duro, pero desafortunadamente no es adecuado para crear índices en conjuntos de datos de cualquier tamaño no trivial.

Use Apache Solr para crear índices. He probado que Solr funciona más de 300 veces más rápido que Zend para crear índices.

Puede usar Zend_Search_Lucene para emitir consultas en el índice que creó con Apache Solr.

Por supuesto, también podría usar la extensión PHP PECL Solr , que recomendaría.