Примеры


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($doctrue);

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 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);

?>

Результатом выполнения данного примера будет что-то подобное:

 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         )  ) 

Пример #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);

?>

Результатом выполнения данного примера будет что-то подобное:

 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         )  )