Примеры
Examples of how to use the Apache Solr extension in PHP
Пример #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/' ); ?>
Пример #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 ()); ?>
Результатом выполнения данного примера
будет что-то подобное:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 446
)
)
Пример #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 ()); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
)
)
Пример #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 ); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
)
)
Пример #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 ); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
)
)
Пример #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 ()); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
)
Пример #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 ()); ?>
Результатом выполнения данного примера
будет что-то подобное:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 1
)
[terms] => SolrObject Object
(
[cat] => SolrObject Object
(
[card] => 2
[connector] => 2
[camera] => 1
[copier] => 1
)
)
)
Пример #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 ()); ?>
Результатом выполнения данного примера
будет что-то подобное:
SolrObject Object
(
[responseHeader] => SolrObject Object
(
[status] => 0
[QTime] => 0
)
[terms] => SolrObject Object
(
[cat] => SolrObject Object
(
[card] => 2
[connector] => 2
)
)
)
Пример #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 ); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
Пример #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 ); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)
Пример #11 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 ); ?>
Результатом выполнения данного примера
будет что-то подобное:
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
)
)