Ejemplos de cómo usar la extensión Apache Solr de PHP
Ejemplo #1 Contenido del archivo BootStrap
<?php
/* Nombre de dominio de 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 */
/* Esto es el tiempo máximo en segundos permitido para la operación de transferencias de datos de http */
/* El valor predeterminado es 30 segundos. */
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($doc, true);
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);
$matriz_respuesta = $respuestaActualización->getResponse();
$datos_faceta = $matriz_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);
$matriz_respuesta = $respuestaActualización->getResponse();
$datos_faceta = $matriz_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 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);
$matriz_respuesta = $respuestaActualización->getResponse();
$datos_faceta = $matriz_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 ) )