Ejemplos

Ejemplos de cómo usar la extensión Apache Solr de PHP

Ejemplo #1 Contenido del archivo BootStrap

<?php

/* Nombre de dominio del servidor Solr */
define('SOLR_SERVER_HOSTNAME''solr.example.com');

/* Si ejecutar en modo seguro */
define('SOLR_SECURE'true);

/* Puerto HTTP para la conexión */
define('SOLR_SERVER_PORT', ((SOLR_SECURE) ? 8443 8983));

/* Nomre de Usuario de Autenticación Básica de HTTP */
define('SOLR_SERVER_USERNAME''admin');

/* Contraseña de Autenticación Básica de HTTP */
define('SOLR_SERVER_PASSWORD''changeit');

/* Tiempo límite de conexión de HTTP */
/* Es el tiempo máximo en segundos permitido para la operación de transferencia de datos de http. El valor predeterminado es 30 seg. */
define('SOLR_SERVER_TIMEOUT'10);

/* Nombre de archivo a una clave + certificado privados con formato PEM (concatenado en ese ornden */
define('SOLR_SSL_CERT''certs/combo.pem');

/* Nombre de archivo a un certificado privado con formato PEM */
define('SOLR_SSL_CERT_ONLY''certs/solr.crt');

/* Nombre de archivo a una clave privada con formato PEM */
define('SOLR_SSL_KEY''certs/solr.key');

/* Contraseña para el archivo de clave privada con formato PEM */
define('SOLR_SSL_KEYPASSWORD''StrongAndSecurePassword');

/* Nombre del archivo que mantiene uno o más certificados CA para ser verificados con su par */
define('SOLR_SSL_CAINFO''certs/cacert.crt');

/* Nombre del directorio que mantiene múltiples certificados CA para ser verificados con su par */
define('SOLR_SSL_CAPATH''certs/');

?>

Ejemplo #2 Añadir un documento al índice

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$doc = new SolrInputDocument();

$doc->addField('id'334455);
$doc->addField('cat''Software');
$doc->addField('cat''Lucene');

$respuestaActualización $cliente->addDocument($doc);

print_r($respuestaActualización->getResponse());

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 446
        )

)

Ejemplo #3 Fusionar un documento con otro documento

<?php

include "bootstrap.php";

$doc = new SolrDocument();

$segundo_doc = new SolrDocument();

$doc->addField('id'1123);

$doc->features "PHP Client Side";
$doc->features "Fast development cycles";

$doc['cat'] = 'Software';
$doc['cat'] = 'Custom Search';
$doc->cat   'Information Technology';

$segundo_doc->addField('cat''Lucene Search');

$segundo_doc->merge($doctrue);

print_r($segundo_doc->toArray());


?>

El resultado del ejemplo sería algo similar a:

Array
(
    [document_boost] => 0
    [field_count] => 3
    [fields] => Array
        (
            [0] => SolrDocumentField Object
                (
                    [name] => cat
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => Software
                            [1] => Custom Search
                            [2] => Information Technology
                        )

                )

            [1] => SolrDocumentField Object
                (
                    [name] => id
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => 1123
                        )

                )

            [2] => SolrDocumentField Object
                (
                    [name] => features
                    [boost] => 0
                    [values] => Array
                        (
                            [0] => PHP Client Side
                            [1] => Fast development cycles
                        )

                )

        )

)

Ejemplo #4 Buscar documentos - respuestas de SolrObject

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery();

$consulta->setQuery('lucene');

$consulta->setStart(0);

$consulta->setRows(50);

$consulta->addField('cat')->addField('features')->addField('id')->addField('timestamp');

$respuesta_consulta $cliente->query($consulta);

$respuesta $respuesta_consulta->getResponse();

print_r($respuesta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
            [params] => SolrObject Object
                (
                    [wt] => xml
                    [rows] => 50
                    [start] => 0
                    [indent] => on
                    [q] => lucene
                    [fl] => cat,features,id,timestamp
                    [version] => 2.2
                )

        )

    [response] => SolrObject Object
        (
            [numFound] => 3
            [start] => 0
            [docs] => Array
                (
                    [0] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => Software
                                    [1] => Lucene
                                )

                            [id] => 334456
                        )

                    [1] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => Software
                                    [1] => Lucene
                                )

                            [id] => 334455
                        )

                    [2] => SolrObject Object
                        (
                            [cat] => Array
                                (
                                    [0] => software
                                    [1] => search
                                )

                            [features] => Array
                                (
                                    [0] => Advanced Full-Text Search Capabilities using Lucene
                                    [1] => Optimized for High Volume Web Traffic
                                    [2] => Standards Based Open Interfaces - XML and HTTP
                                    [3] => Comprehensive HTML Administration Interfaces
                                    [4] => Scalability - Efficient Replication to other Solr Search Servers
                                    [5] => Flexible and Adaptable with XML configuration and Schema
                                    [6] => Good unicode support: héllo (hello with an accent over the e)
                                )

                            [id] => SOLR1000
                            [timestamp] => 2009-09-04T20:38:55.906
                        )

                )

        )

)

Ejemplo #5 Buscar documentos - respuestas de SolrDocument

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery();

$consulta->setQuery('lucene');

$consulta->setStart(0);

$consulta->setRows(50);

$consulta->addField('cat')->addField('features')->addField('id')->addField('timestamp');

$respuesta_consulta $cliente->query($consulta);

$respuesta_consulta->setParseMode(SolrQueryResponse::PARSE_SOLR_DOC);

$respuesta $respuesta_consulta->getResponse();

print_r($respuesta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
            [params] => SolrObject Object
                (
                    [wt] => xml
                    [rows] => 50
                    [start] => 0
                    [indent] => on
                    [q] => lucene
                    [fl] => cat,features,id,timestamp
                    [version] => 2.2
                )

        )

    [response] => SolrObject Object
        (
            [numFound] => 3
            [start] => 0
            [docs] => Array
                (
                    [0] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 19740
                        )

                    [1] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 25485
                        )

                    [2] => SolrDocument Object
                        (
                            [_hashtable_index:SolrDocument:private] => 25052
                        )

                )

        )

)

Ejemplo #6 Ejemplo sencillo de TermsComponent - básico

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery();

$consulta->setTerms(true);

$consulta->setTermsField('cat');

$respuestaActualización $cliente->query($consulta);

print_r($respuestaActualización->getResponse());

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 2
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [electronics] => 14
                    [Lucene] => 4
                    [Software] => 4
                    [memory] => 3
                    [card] => 2
                    [connector] => 2
                    [drive] => 2
                    [graphics] => 2
                    [hard] => 2
                    [monitor] => 2
                )

        )

)

Ejemplo #7 Ejemplo sencillo de TermsComponent - usar un prefijo

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery();

$consulta->setTerms(true);

/* Devolver sólo los términos que empiecen con $prefijo */
$prefijo 'c';

$consulta->setTermsField('cat')->setTermsPrefix($prefijo);

$respuestaActualización $cliente->query($consulta);

print_r($respuestaActualización->getResponse());

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 1
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [card] => 2
                    [connector] => 2
                    [camera] => 1
                    [copier] => 1
                )

        )

)

Ejemplo #8 Ejemplo sencillo de TermsComponent - especificar una frecuencia mínima

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery();

$consulta->setTerms(true);

/* Devolver sólo los términos que empiecen con $prefijo */
$prefijo 'c';

/* Devolver sólo los términos con una frecuencia de 2 o mayor */
$frecuencia_mín 2;

$consulta->setTermsField('cat')->setTermsPrefix($prefijo)->setTermsMinCount($frecuencia_mín);

$respuestaActualización $cliente->query($consulta);

print_r($respuestaActualización->getResponse());

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [responseHeader] => SolrObject Object
        (
            [status] => 0
            [QTime] => 0
        )

    [terms] => SolrObject Object
        (
            [cat] => SolrObject Object
                (
                    [card] => 2
                    [connector] => 2
                )

        )

)

Ejemplo #9 Ejemplo sencillo de Facet

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery('*:*');

$consulta->setFacet(true);

$consulta->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2);

$respuestaActualización $cliente->query($consulta);

$array_respuesta $respuestaActualización->getResponse();

$datos_faceta $array_respuesta->facet_counts->facet_fields;

print_r($datos_faceta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
            [1] => 3
            [184] => 3
            [2] => 3
            [3200] => 3
            [400] => 3
            [500] => 3
            [ddr] => 3
            [i] => 3
            [ipod] => 3
            [memori] => 3
            [pc] => 3
            [pin] => 3
            [pod] => 3
            [sdram] => 3
            [system] => 3
            [unbuff] => 3
            [canon] => 2
            [corsair] => 2
            [drive] => 2
            [hard] => 2
            [mb] => 2
            [n] => 2
            [power] => 2
            [retail] => 2
            [video] => 2
            [x] => 2
        )

)

Ejemplo #10 Ejemplo sencillo de Facet - con sobrescritura de campo opcional para mincount

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery('*:*');

$consulta->setFacet(true);

$consulta->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2)->setFacetMinCount(4'name');

$respuestaActualización $cliente->query($consulta);

$array_respuesta $respuestaActualización->getResponse();

$datos_faceta $array_respuesta->facet_counts->facet_fields;

print_r($datos_faceta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
        )

)

Ejemplo #11 Ejemplo de fecha de faceta

<?php

include "bootstrap.php";

$opciones = array
(
        
'hostname' => SOLR_SERVER_HOSTNAME,
        
'login'    => SOLR_SERVER_USERNAME,
        
'password' => SOLR_SERVER_PASSWORD,
        
'port'     => SOLR_SERVER_PORT,
);

$client = new SolrClient($opciones);

$consulta = new SolrQuery('*:*');

$consulta->setFacet(true);

$consulta->addFacetDateField('manufacturedate_dt');

$consulta->setFacetDateStart('2006-02-13T00:00:00Z');

$consulta->setFacetDateEnd('2012-02-13T00:00:00Z');

$consulta->setFacetDateGap('+1YEAR');

$consulta->setFacetDateHardEnd(1);

$consulta->addFacetDateOther('before');

$respuestaActualización $client->query($consulta);

$array_respuesta $respuestaActualización->getResponse();

$datos_faceta $array_respuesta->facet_counts->facet_dates;

print_r($datos_faceta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [manufacturedate_dt] => SolrObject Object
        (
            [2006-02-13T00:00:00Z] => 9
            [2007-02-13T00:00:00Z] => 0
            [2008-02-13T00:00:00Z] => 0
            [2009-02-13T00:00:00Z] => 0
            [2010-02-13T00:00:00Z] => 0
            [2011-02-13T00:00:00Z] => 0
            [gap] => +1YEAR
            [start] => 2006-02-13T00:00:00Z
            [end] => 2012-02-13T00:00:00Z
            [before] => 2
        )

)

Ejemplo #12 Conectar a un Servidor con SSL Habilitado

<?php

include "bootstrap.php";

$opciones = array
(
    
'hostname' => SOLR_SERVER_HOSTNAME,
    
'login'    => SOLR_SERVER_USERNAME,
    
'password' => SOLR_SERVER_PASSWORD,
    
'port'     => SOLR_SERVER_PORT,
    
'timeout'  => SOLR_SERVER_TIMEOUT,
    
'secure'   => SOLR_SECURE,
    
'ssl_cert' => SOLR_SSL_CERT_ONLY,
    
'ssl_key'  => SOLR_SSL_KEY,
    
'ssl_keypassword' => SOLR_SSL_KEYPASSWORD,
    
'ssl_cainfo' => SOLR_SSL_CAINFO,
);

$cliente = new SolrClient($opciones);

$consulta = new SolrQuery('*:*');

$consulta->setFacet(true);

$consulta->addFacetField('cat')->addFacetField('name')->setFacetMinCount(2)->setFacetMinCount(4'name');

$respuestaActualización $cliente->query($consulta);

$array_respuesta $respuestaActualización->getResponse();

$datos_faceta $array_respuesta->facet_counts->facet_fields;

print_r($datos_faceta);

?>

El resultado del ejemplo sería algo similar a:

SolrObject Object
(
    [cat] => SolrObject Object
        (
            [electronics] => 14
            [memory] => 3
            [Lucene] => 2
            [Software] => 2
            [card] => 2
            [connector] => 2
            [drive] => 2
            [graphics] => 2
            [hard] => 2
            [monitor] => 2
            [search] => 2
            [software] => 2
        )

    [name] => SolrObject Object
        (
            [gb] => 6
        )

)
add a note add a note

User Contributed Notes 8 notes

up
7
cliff
2 years ago
As of solr 4.0 the waitFlush parameter is removed.

Source
http://wiki.apache.org/solr/UpdateXmlMessages

$client->commit() throws an error
[SolrClientException]
  Unsuccessful update request. Response Code 400. <?xml version="1.0" encoding="UTF-8"?>
  <response>

  <lst name="responseHeader">
    <int name="status">400</int>
    <int name="QTime">1</int>
  </lst>
  <lst name="error">
    <str name="msg">Unknown commit parameter 'waitFlush'</str>
    <int name="code">400</int>
  </lst>
  </response>
up
2
jschwehn+php.a.t.gmail.com
4 years ago
If you like to access a different RequestHander than '/select' you can change it via http://php.net/manual/en/solrclient.setservlet.php
up
1
tomanr1 at wp dot pl
10 months ago
In case someone would like to use this solrClient with solr v.4.0 and higher i've prepared my own commit function

class solr {
        public function delete($query ) {
                $this->_client->deleteByQuery($query);
                $this->commit();
        }

        public function commit() {
                $solrConfig= // array with solr host, port, path to collection (/solr/my_collection),
                $solrAddress = $solrConfig['hostname'] . ':' . $solrConfig['port'] . $solrConfig['path'];
                $output = array();
                $response = exec('curl ' . $solrAddress . '/update?commit=true', $output);
                return $output;
        }
}
up
1
tsengmeat at gmail dot com
1 year ago
As of solr 4.0 the waitFlush parameter is removed.
If you're using the solr 4.0 or later version (and you have to),when you do this
<?php $client->commit(); ?>
you will get a solr error like this:
"Unknown commit parameter 'waitFlush'."

If you insist on using this PHP Solr extension and solr 4.0 or later version,you can edit the extension's source (version 1.0.2) php_solr_client.c.
for the SolrClient's optimize method:
at line 1490 :
  zend_bool waitFlush = 1, waitSearcher = 1;
  after edited:
  zend_bool waitSearcher = 1;
at line 1493:
  char *waitFlushValue, *waitSearcherValue;
  after edited:
  zend_bool waitSearcher = 1;
at line 1502:
  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sbb", &maxSegments, &maxSegmentsLen, &waitFlush, &waitSearcher) == FAILURE) {
  after editd:
  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sb", &maxSegments, &maxSegmentsLen, &waitSearcher) == FAILURE) {

remove the line 1509 and 1515.

And do the same edit for the SolrClient's commit method at line 1561,1564,1573 and remove the line 1580,1586

The final step, compile the code and install it.
Good luck!
up
1
trickito at yahoo
4 years ago
if your path to solr is something other than: /solr

you should add this to the bootstrap file above:

define('SOLR_SERVER_PATH', 'my-solr-url');

and then a corresponding entry to the options array in your client php code like:

'path'     => SOLR_SERVER_PATH

I couldn't find this is in the documentation and had to peek at the source to figure it out.
up
0
khe77o at gmail dot youknowwhat
2 years ago
The documentation in the example section doesn't mention that you need to commit once you've added doc(s).

So in short it would be something like:
$client = new SolrClient(array('hostname' => '127.0.0.1', 'port' => 8080));
$doc = new SolrInputDocument();
$doc->addField('id', 12345);
$doc->addField('name', 'some person');

$result = $client->addDocument($doc);

/* you are not done yet, you need to commit */
$client->commit();

Now if you query you should see your doc =]
up
-1
jschwehn+php at IGNOrMEgmail dot com
3 years ago
If you are using Solr's multicore feature, you can access the cores via the path parameter in the $options array.
E.g.
<?php
  $options
= array(...., 'path' => 'solr/core0', ...);
?>
up
-2
bjorn at bjorn-erik dot biz
4 years ago
If you're testing these examples on a fresh install of solr, you will need to run a commit statement after you add documents to receive results when searching.

For example, add this:
<?php $client->commit(); ?>

to example 3 to be able to get any results when doing a search using example 5.
To Top