Hi Derick,

thanks for your answer.

Am Monday 23 March 2009 13:37:43 schrieb Derick Rethans:
> On Mon, 23 Mar 2009, Thomas Koch wrote:
> > 4) Indexing only one document at a time
> >
> > Unfortunatly I did not run a benchmark before I changed my code, but it
> > felt much slower afterwards. I believe the main reason is, that I can
> > index only one document at a time with ezcSearch, while I sent 200
> > documents with one request in my hand crafted version.
>
> That's not true, you can use transactions:

I did put it in a transaction, but there is still one HTTP POST for each
document.
I made a quick refactor and used the code from the solr handler to send
200 documents in one HTTP request.

function indexArticles( ezcSearchSolrHandler $solr, Array $articles, Array 
$mapping )
{
    if( empty( $articles ) ) return;

    $xml = new XmlWriter();
    $xml->openMemory();
    $xml->startElement( 'add' );
    foreach( $articles as $article )
    {
        $state = $article->getState();
        $xml->startElement( 'doc' );
        foreach ( $mapping as $field => $property )
        {
            $xml->startElement( 'field' );
            $xml->writeAttribute( 'name', $field );
            $xml->text( $state[$property] );
            $xml->endElement();
        }
        $xml->endElement();
    }
    $xml->endElement();
    $doc = $xml->outputMemory( true );

    $r = $solr->sendRawPostCommand( 'update', array( 'wt' => 'json' ), $doc );
    $r = $solr->sendRawPostCommand( 'update', array( 'wt' => 'json' ), 
'<commit/>' );
}

According to xdebug the total code execution time dropped from 3.8E6 to 2.2E6.

I tried to put the above function into the solr handler and call it from
ezcSearchSolrHandler::index(), but it did not work, since I want to
avoid calling mapFieldValueForIndex.

Idea: Why not throw the whole mapping stuff out of the solr handler and
use optional value converter like for PO?

Best regards,
-- 
Thomas Koch, http://www.koch.ro

-- 
Components mailing list
Components@lists.ez.no
http://lists.ez.no/mailman/listinfo/components

Reply via email to