<?xml version="1.0" encoding="utf-8"?> <!-- $Revision$ --> <chapter xml:id="solr.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> &reftitle.examples; <para> Examples of how to use the Apache Solr extension in PHP </para> <example> <title>Contents of the BootStrap file</title> <programlisting role="php"> <![CDATA[ <?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/'); ?> ]]> </programlisting> </example> <example> <title>Adding a document to the index</title> <programlisting role="php"> <![CDATA[ <?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()); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ SolrObject Object ( [responseHeader] => SolrObject Object ( [status] => 0 [QTime] => 446 ) ) ]]> </screen> </example> <example> <title>Merging one document into another document</title> <programlisting role="php"> <![CDATA[ <?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()); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ) ) ]]> </screen> </example> <example> <title>Searching for documents - SolrObject responses</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ) ) ]]> </screen> </example> <example> <title>Searching for documents - SolrDocument responses</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ) ) ]]> </screen> </example> <example> <title>Simple TermsComponent example - basic</title> <programlisting role="php"> <![CDATA[ <?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()); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ) ]]> </screen> </example> <example> <title>Simple TermsComponent example - using a prefix</title> <programlisting role="php"> <![CDATA[ <?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()); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ SolrObject Object ( [responseHeader] => SolrObject Object ( [status] => 0 [QTime] => 1 ) [terms] => SolrObject Object ( [cat] => SolrObject Object ( [card] => 2 [connector] => 2 [camera] => 1 [copier] => 1 ) ) ) ]]> </screen> </example> <example> <title>Simple TermsComponent example - specifying a minimum frequency</title> <programlisting role="php"> <![CDATA[ <?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()); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ SolrObject Object ( [responseHeader] => SolrObject Object ( [status] => 0 [QTime] => 0 ) [terms] => SolrObject Object ( [cat] => SolrObject Object ( [card] => 2 [connector] => 2 ) ) ) ]]> </screen> </example> <example> <title>Simple Facet Example</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ]]> </screen> </example> <example> <title>Simple Facet Example - with optional field override for mincount</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ]]> </screen> </example> <example> <title>Facet Date Example</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ]]> </screen> </example> <example> <title>Connecting to SSL-Enabled Server</title> <programlisting role="php"> <![CDATA[ <?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); ?> ]]> </programlisting> &example.outputs.similar; <screen> <![CDATA[ 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 ) ) ]]> </screen> </example> </chapter> <!-- Keep this comment at the end of the file Local variables: mode: sgml sgml-omittag:t sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t indent-tabs-mode:nil sgml-parent-document:nil sgml-default-dtd-file:"~/.phpdoc/manual.ced" sgml-exposed-tags:nil sgml-local-catalogs:nil sgml-local-ecat-files:nil End: vim600: syn=xml fen fdm=syntax fdl=2 si vim: et tw=78 syn=sgml vi: ts=1 sw=1 -->