Examples
Examples of how to use the Apache Solr extension in PHP
Example #1 Contents of the BootStrap file
<?php
/* Domain name of the Solr server */
define ( 'SOLR_SERVER_HOSTNAME' , 'solr.example.com' );
/* Whether or not to run in secure mode */
define ( 'SOLR_SECURE' , true );
/* HTTP Port to connection */
define ( 'SOLR_SERVER_PORT' , (( SOLR_SECURE ) ? 8443 : 8983 ));
/* HTTP Basic Authentication Username */
define ( 'SOLR_SERVER_USERNAME' , 'admin' );
/* HTTP Basic Authentication password */
define ( 'SOLR_SERVER_PASSWORD' , 'changeit' );
/* HTTP connection timeout */
/* This is maximum time in seconds allowed for the http data transfer operation. Default value is 30 seconds */
define ( 'SOLR_SERVER_TIMEOUT' , 10 );
/* File name to a PEM-formatted private key + private certificate (concatenated in that order) */
define ( 'SOLR_SSL_CERT' , 'certs/combo.pem' );
/* File name to a PEM-formatted private certificate only */
define ( 'SOLR_SSL_CERT_ONLY' , 'certs/solr.crt' );
/* File name to a PEM-formatted private key */
define ( 'SOLR_SSL_KEY' , 'certs/solr.key' );
/* Password for PEM-formatted private key file */
define ( 'SOLR_SSL_KEYPASSWORD' , 'StrongAndSecurePassword' );
/* Name of file holding one or more CA certificates to verify peer with*/
define ( 'SOLR_SSL_CAINFO' , 'certs/cacert.crt' );
/* Name of directory holding multiple CA certificates to verify peer with */
define ( 'SOLR_SSL_CAPATH' , 'certs/' );
?>
Example #2 Adding a document to the index
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$doc = new SolrInputDocument ();
$doc -> addField ( 'id' , 334455 );
$doc -> addField ( 'cat' , 'Software' );
$doc -> addField ( 'cat' , 'Lucene' );
$updateResponse = $client -> addDocument ( $doc );
print_r ( $updateResponse -> getResponse ());
?>
The above example will output
something similar to:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 446
)
)
Example #3 Merging one document into another document
<?php
include "bootstrap.php" ;
$doc = new SolrDocument ();
$second_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' ;
$second_doc -> addField ( 'cat' , 'Lucene Search' );
$second_doc -> merge ( $doc , true );
print_r ( $second_doc -> toArray ());
?>
The above example will output
something similar to:
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
)
)
)
)
Example #4 Searching for documents - SolrObject responses
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ();
$query -> setQuery ( 'lucene' );
$query -> setStart ( 0 );
$query -> setRows ( 50 );
$query -> addField ( 'cat' )-> addField ( 'features' )-> addField ( 'id' )-> addField ( 'timestamp' );
$query_response = $client -> query ( $query );
$response = $query_response -> getResponse ();
print_r ( $response );
?>
The above example will output
something similar to:
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
)
)
)
)
Example #5 Searching for documents - SolrDocument responses
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ();
$query -> setQuery ( 'lucene' );
$query -> setStart ( 0 );
$query -> setRows ( 50 );
$query -> addField ( 'cat' )-> addField ( 'features' )-> addField ( 'id' )-> addField ( 'timestamp' );
$query_response = $client -> query ( $query );
$query_response -> setParseMode ( SolrQueryResponse :: PARSE_SOLR_DOC );
$response = $query_response -> getResponse ();
print_r ( $response );
?>
The above example will output
something similar to:
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
)
)
)
)
Example #6 Simple TermsComponent example - basic
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ();
$query -> setTerms ( true );
$query -> setTermsField ( 'cat' );
$updateResponse = $client -> query ( $query );
print_r ( $updateResponse -> getResponse ());
?>
The above example will output
something similar to:
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
)
)
)
Example #7 Simple TermsComponent example - using a prefix
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ();
$query -> setTerms ( true );
/* Return only terms starting with $prefix */
$prefix = 'c' ;
$query -> setTermsField ( 'cat' )-> setTermsPrefix ( $prefix );
$updateResponse = $client -> query ( $query );
print_r ( $updateResponse -> getResponse ());
?>
The above example will output
something similar to:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 1
)
[terms] => SolrObject Object
(
[cat] => SolrObject Object
(
[card] => 2
[connector] => 2
[camera] => 1
[copier] => 1
)
)
)
Example #8 Simple TermsComponent example - specifying a minimum frequency
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ();
$query -> setTerms ( true );
/* Return only terms starting with $prefix */
$prefix = 'c' ;
/* Return only terms with a frequency of 2 or greater */
$min_frequency = 2 ;
$query -> setTermsField ( 'cat' )-> setTermsPrefix ( $prefix )-> setTermsMinCount ( $min_frequency );
$updateResponse = $client -> query ( $query );
print_r ( $updateResponse -> getResponse ());
?>
The above example will output
something similar to:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 0
)
[terms] => SolrObject Object
(
[cat] => SolrObject Object
(
[card] => 2
[connector] => 2
)
)
)
Example #9 Simple Facet Example
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ( '*:*' );
$query -> setFacet ( true );
$query -> addFacetField ( 'cat' )-> addFacetField ( 'name' )-> setFacetMinCount ( 2 );
$updateResponse = $client -> query ( $query );
$response_array = $updateResponse -> getResponse ();
$facet_data = $response_array -> facet_counts -> facet_fields ;
print_r ( $facet_data );
?>
The above example will output
something similar to:
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
)
)
Example #10 Simple Facet Example - with optional field override for mincount
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ( '*:*' );
$query -> setFacet ( true );
$query -> addFacetField ( 'cat' )-> addFacetField ( 'name' )-> setFacetMinCount ( 2 )-> setFacetMinCount ( 4 , 'name' );
$updateResponse = $client -> query ( $query );
$response_array = $updateResponse -> getResponse ();
$facet_data = $response_array -> facet_counts -> facet_fields ;
print_r ( $facet_data );
?>
The above example will output
something similar to:
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
)
)
Example #11 Facet Date Example
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ( '*:*' );
$query -> setFacet ( true );
$query -> addFacetDateField ( 'manufacturedate_dt' );
$query -> setFacetDateStart ( '2006-02-13T00:00:00Z' );
$query -> setFacetDateEnd ( '2012-02-13T00:00:00Z' );
$query -> setFacetDateGap ( '+1YEAR' );
$query -> setFacetDateHardEnd ( 1 );
$query -> addFacetDateOther ( 'before' );
$updateResponse = $client -> query ( $query );
$response_array = $updateResponse -> getResponse ();
$facet_data = $response_array -> facet_counts -> facet_dates ;
print_r ( $facet_data );
?>
The above example will output
something similar to:
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
)
)
Example #12 Connecting to SSL-Enabled Server
<?php
include "bootstrap.php" ;
$options = 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 ,
);
$client = new SolrClient ( $options );
$query = new SolrQuery ( '*:*' );
$query -> setFacet ( true );
$query -> addFacetField ( 'cat' )-> addFacetField ( 'name' )-> setFacetMinCount ( 2 )-> setFacetMinCount ( 4 , 'name' );
$updateResponse = $client -> query ( $query );
$response_array = $updateResponse -> getResponse ();
$facet_data = $response_array -> facet_counts -> facet_fields ;
print_r ( $facet_data );
?>
The above example will output
something similar to:
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
)
)
Example #13 Collapsing a SolrQuery
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
'path' => SOLR_SERVER_PATH
);
$client = new SolrClient ( $options );
$query = new SolrQuery ( '*:*' );
$collapseFunction = new SolrCollapseFunction ( 'manu_id_s' );
$collapseFunction
-> setSize ( 2 )
-> setNullPolicy ( SolrCollapseFunction :: NULLPOLICY_IGNORE );
$query
-> collapse ( $collapseFunction )
-> setRows ( 4 );
$queryResponse = $client -> query ( $query );
$response = $queryResponse -> getResponse ();
print_r ( $response );
?>
The above example will output
something similar to:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 1
[params] => SolrObject Object
(
[q] => *:*
[indent] => on
[fq] => {!collapse field=manu_id_s size=2 nullPolicy=ignore}
[rows] => 4
[version] => 2.2
[wt] => xml
)
)
[response] => SolrObject Object
(
[numFound] => 14
[start] => 0
[docs] => Array
(
[0] => SolrObject Object
(
[id] => SP2514N
[name] => Array
(
[0] => Samsung SpinPoint P120 SP2514N - hard drive - 250 GB - ATA-133
)
[manu] => Array
(
[0] => Samsung Electronics Co. Ltd.
)
[manu_id_s] => samsung
[cat] => Array
(
[0] => electronics
[1] => hard drive
)
[features] => Array
(
[0] => 7200RPM, 8MB cache, IDE Ultra ATA-133
[1] => NoiseGuard, SilentSeek technology, Fluid Dynamic Bearing (FDB) motor
)
[price] => Array
(
[0] => 92
)
[popularity] => Array
(
[0] => 6
)
[inStock] => Array
(
[0] => 1
)
[manufacturedate_dt] => 2006-02-13T15:26:37Z
[store] => Array
(
[0] => 35.0752,-97.032
)
[_version_] => 1510294336412057600
)
[1] => SolrObject Object
(
[id] => 6H500F0
[name] => Array
(
[0] => Maxtor DiamondMax 11 - hard drive - 500 GB - SATA-300
)
[manu] => Array
(
[0] => Maxtor Corp.
)
[manu_id_s] => maxtor
[cat] => Array
(
[0] => electronics
[1] => hard drive
)
[features] => Array
(
[0] => SATA 3.0Gb/s, NCQ
[1] => 8.5ms seek
[2] => 16MB cache
)
[price] => Array
(
[0] => 350
)
[popularity] => Array
(
[0] => 6
)
[inStock] => Array
(
[0] => 1
)
[store] => Array
(
[0] => 45.17614,-93.87341
)
[manufacturedate_dt] => 2006-02-13T15:26:37Z
[_version_] => 1510294336449806336
)
[2] => SolrObject Object
(
[id] => F8V7067-APL-KIT
[name] => Array
(
[0] => Belkin Mobile Power Cord for iPod w/ Dock
)
[manu] => Array
(
[0] => Belkin
)
[manu_id_s] => belkin
[cat] => Array
(
[0] => electronics
[1] => connector
)
[features] => Array
(
[0] => car power adapter, white
)
[weight] => Array
(
[0] => 4
)
[price] => Array
(
[0] => 19.95
)
[popularity] => Array
(
[0] => 1
)
[inStock] => Array
(
[0] =>
)
[store] => Array
(
[0] => 45.18014,-93.87741
)
[manufacturedate_dt] => 2005-08-01T16:30:25Z
[_version_] => 1510294336458194944
)
[3] => SolrObject Object
(
[id] => MA147LL/A
[name] => Array
(
[0] => Apple 60 GB iPod with Video Playback Black
)
[manu] => Array
(
[0] => Apple Computer Inc.
)
[manu_id_s] => apple
[cat] => Array
(
[0] => electronics
[1] => music
)
[features] => Array
(
[0] => iTunes, Podcasts, Audiobooks
[1] => Stores up to 15,000 songs, 25,000 photos, or 150 hours of video
[2] => 2.5-inch, 320x240 color TFT LCD display with LED backlight
[3] => Up to 20 hours of battery life
[4] => Plays AAC, MP3, WAV, AIFF, Audible, Apple Lossless, H.264 video
[5] => Notes, Calendar, Phone book, Hold button, Date display, Photo wallet, Built-in games, JPEG photo playback, Upgradeable firmware, USB 2.0 compatibility, Playback speed control, Rechargeable capability, Battery level indication
)
[includes] => Array
(
[0] => earbud headphones, USB cable
)
[weight] => Array
(
[0] => 5.5
)
[price] => Array
(
[0] => 399
)
[popularity] => Array
(
[0] => 10
)
[inStock] => Array
(
[0] => 1
)
[store] => Array
(
[0] => 37.7752,-100.0232
)
[manufacturedate_dt] => 2005-10-12T08:00:00Z
[_version_] => 1510294336562003968
)
)
)
)
Example #14 Solr Real Time Get (RTG) example SolrClient::getById()
<?php
include "bootstrap.php" ;
$options = array
(
'hostname' => SOLR_SERVER_HOSTNAME ,
'login' => SOLR_SERVER_USERNAME ,
'password' => SOLR_SERVER_PASSWORD ,
'port' => SOLR_SERVER_PORT ,
'path' => SOLR_SERVER_PATH
);
$client = new SolrClient ( $options );
$response = $client -> getById ( 'GB18030TEST' );
print_r ( $response -> getResponse ());
?>
The above example will output
something similar to:
SolrObject Object
(
[doc] => SolrObject Object
(
[id] => GB18030TEST
[name] => Array
(
[0] => Test with some GB18030 encoded characters
)
[features] => Array
(
[0] => No accents here
[1] => 这是一个功能
[2] => This is a feature (translated)
[3] => 这份文件是很有光泽
[4] => This document is very shiny (translated)
)
[price] => Array
(
[0] => 0
)
[inStock] => Array
(
[0] => 1
)
[_version_] => 1510294336239042560
)
)