[
https://issues.apache.org/jira/browse/SOLR-1967?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Israel Ekpo updated SOLR-1967:
------------------------------
Description:
Hi Solr users,
If you are using Apache Solr via PHP, I have some good news for you.
There is a new response writer for the PHP native extension, currently
available as a plugin.
This new feature adds a new response writer class to the
org.apache.solr.request package.
This class is used by the PHP Native Solr Client driver to prepare the query
response from Solr.
This response writer allows you to configure the way the data is serialized for
the PHP client.
You can use your own class name and you can also control how the properties are
serialized as well.
The formatting of the response data is very similar to the way it is currently
done by the PECL extension on the client side.
The only difference now is that this serialization is happening on the server
side instead.
You will find this new response writer particularly useful when dealing with
responses for
- highlighting
- admin threads responses
- more like this responses
to mention just a few
You can pass the "objectClassName" request parameter to specify the class name
to be used for serializing objects.
Please note that the class must be available on the client side to avoid a
PHP_Incomplete_Object error during the unserialization process.
You can also pass in the "objectPropertiesStorageMode" request parameter with
either a 0 (independent properties) or a 1 (combined properties).
These parameters can also be passed as a named list when loading the response
writer in the solrconfig.xml file
Having this control allows you to create custom objects which gives the
flexibility of implementing custom __get methods, ArrayAccess, Traversable and
Iterator interfaces on the PHP client side.
Until this class in incorporated into Solr, you simply have to copy the jar
file containing this plugin into your lib directory under $SOLR_HOME
The jar file is available here and so is the source code.
Then set up the configuration as shown below and then restart your servelet
container
Below is an example configuration in solrconfig.xml
<code>
<queryResponseWriter name="phpnative"
class="org.apache.solr.request.PHPNativeResponseWriter">
<!-- You can choose a different class for your objects. Just make sure the
class is available in the client -->
<str name="objectClassName">SolrObject</str>
<!--
0 means OBJECT_PROPERTIES_STORAGE_MODE_INDEPENDENT
1 means OBJECT_PROPERTIES_STORAGE_MODE_COMBINED
In independed mode, each property is a separate property
In combined mode, all the properites are merged into a _properties array.
The combined mode allows you to create custom __getters and you could also
implement ArrayAccess, Iterator and Traversable
-->
<int name="objectPropertiesStorageMode">0</int>
</queryResponseWriter
<code>
Below is an example implementation on the PHP client side.
Support for specifying custom response writers will be available starting from
the 0.9.11 version of the PECL extension for Solr currently available here
http://pecl.php.net/package/solr
Here is an example of how to use the new response writer with the PHP client.
<code>
<?php
class SolrClass
{
public $_properties = array();
public function __get($property_name) {
if (property_exists($this, $property_name)) { return $this->$property_name; }
else if (isset($_properties[$property_name])) { return
$_properties[$property_name]; }
return null;
}
}
$options = array
(
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/'
);
$client = new SolrClient($options);
$client->setResponseWriter("phpnative");
$response = $client->ping();
$query = new SolrQuery();
$query->setQuery(":");
$query->set("objectClassName", "SolrClass");
$query->set("objectPropertiesStorageMode", 1);
$response = $client->query($query);
$resp = $response->getResponse();
?>
<code>
Documentation of the changes to the PECL extension are available here
http://docs.php.net/manual/en/solrclient.construct.php
http://docs.php.net/manual/en/solrclient.setresponsewriter.php
Please contact me at [email protected], if you have any questions or comments.
was:
This new feature adds a new response writer class to the
org.apache.solr.request package.
This class is used by the PHP Native Solr Client driver to prepare the query
response from Solr.
This response writer allows you to configure the way the data is serialized for
the PHP client.
You can use your own class name and you can also control how the properties are
serialized as well.
You can pass the objectClassName request parameter to specify the class name to
be used for serializing objects. Please note that the class must be available
on the client side to avoid a PHP_Incomplete_Object error during the
unserialization process.
You can also pass in the objectPropertiesStorageMode request parameter with
either a 0 (independent properties) or a 1 (combined properties).
These parameters can also be passed as a named list when loading the response
writer in the solrconfig.xml file
Having this control allows you to create custom objects which gives the
flexibility of implementing custom __get methods, ArrayAccess, Traversable and
Iterator interfaces on the PHP client side.
Until this class in incorporated into Solr, you simply have to copy the jar
file containing this plugin into your lib directory under $SOLR_HOME
Then set up the configuration as shown below and then restart your servelet
container
Below is an example configuration in solrconfig.xml
<code>
<queryResponseWriter name="phpnative"
class="org.apache.solr.request.PHPNativeResponseWriter">
<!-- You can choose a different class for your objects. Just make sure
the class is available in the client -->
<str name="objectClassName">SolrObject</str>
<!--
0 means OBJECT_PROPERTIES_STORAGE_MODE_INDEPENDENT
1 means OBJECT_PROPERTIES_STORAGE_MODE_COMBINED
In independed mode, each property is a separate property
In combined mode, all the properites are merged into a _properties
array.
The combined mode allows you to create custom __getters and you could
also implement ArrayAccess, Iterator and Traversable
-->
<int name="objectPropertiesStorageMode">0</int>
</queryResponseWriter
<code>
Below is an example implementation on the PHP client side.
Support for specifying custom response writers will be available starting from
the 0.9.11 version of the PECL extension for Solr currently available in trunk
<code>
<?php
class SolrClass
{
public $_properties = array();
public function __get($property_name) {
if (property_exists($this, $property_name)) {
return $this->$property_name;
} else if (isset($_properties[$property_name])) {
return $_properties[$property_name];
}
return null;
}
}
$options = array
(
'hostname' => 'localhost',
'port' => 8983,
'path' => '/solr/'
);
$client = new SolrClient($options);
$client->setResponseWriter("phpnative");
$response = $client->ping();
$query = new SolrQuery();
$query->setQuery("*:*");
$query->set("objectClassName", "SolrClass");
$query->set("objectPropertiesStorageMode", 1);
$response = $client->query($query);
$resp = $response->getResponse();
?>
<code>
> New Native PHP Response Writer Class
> ------------------------------------
>
> Key: SOLR-1967
> URL: https://issues.apache.org/jira/browse/SOLR-1967
> Project: Solr
> Issue Type: New Feature
> Components: clients - php, Response Writers
> Affects Versions: 1.4
> Reporter: Israel Ekpo
> Fix For: 1.4, 1.4.1, 1.5, 3.1, 4.0
>
> Attachments: phpnative.tar.gz, phpnativeresponsewriter.jar
>
> Original Estimate: 0h
> Remaining Estimate: 0h
>
> Hi Solr users,
> If you are using Apache Solr via PHP, I have some good news for you.
> There is a new response writer for the PHP native extension, currently
> available as a plugin.
> This new feature adds a new response writer class to the
> org.apache.solr.request package.
> This class is used by the PHP Native Solr Client driver to prepare the query
> response from Solr.
> This response writer allows you to configure the way the data is serialized
> for the PHP client.
> You can use your own class name and you can also control how the properties
> are serialized as well.
> The formatting of the response data is very similar to the way it is
> currently done by the PECL extension on the client side.
> The only difference now is that this serialization is happening on the server
> side instead.
> You will find this new response writer particularly useful when dealing with
> responses for
> - highlighting
> - admin threads responses
> - more like this responses
> to mention just a few
> You can pass the "objectClassName" request parameter to specify the class
> name to be used for serializing objects.
> Please note that the class must be available on the client side to avoid a
> PHP_Incomplete_Object error during the unserialization process.
> You can also pass in the "objectPropertiesStorageMode" request parameter with
> either a 0 (independent properties) or a 1 (combined properties).
> These parameters can also be passed as a named list when loading the response
> writer in the solrconfig.xml file
> Having this control allows you to create custom objects which gives the
> flexibility of implementing custom __get methods, ArrayAccess, Traversable
> and Iterator interfaces on the PHP client side.
> Until this class in incorporated into Solr, you simply have to copy the jar
> file containing this plugin into your lib directory under $SOLR_HOME
> The jar file is available here and so is the source code.
> Then set up the configuration as shown below and then restart your servelet
> container
> Below is an example configuration in solrconfig.xml
> <code>
> <queryResponseWriter name="phpnative"
> class="org.apache.solr.request.PHPNativeResponseWriter">
> <!-- You can choose a different class for your objects. Just make sure the
> class is available in the client -->
> <str name="objectClassName">SolrObject</str>
> <!--
> 0 means OBJECT_PROPERTIES_STORAGE_MODE_INDEPENDENT
> 1 means OBJECT_PROPERTIES_STORAGE_MODE_COMBINED
> In independed mode, each property is a separate property
> In combined mode, all the properites are merged into a _properties array.
> The combined mode allows you to create custom __getters and you could also
> implement ArrayAccess, Iterator and Traversable
> -->
> <int name="objectPropertiesStorageMode">0</int>
> </queryResponseWriter
> <code>
> Below is an example implementation on the PHP client side.
> Support for specifying custom response writers will be available starting
> from the 0.9.11 version of the PECL extension for Solr currently available
> here
> http://pecl.php.net/package/solr
> Here is an example of how to use the new response writer with the PHP client.
> <code>
> <?php
> class SolrClass
> {
> public $_properties = array();
> public function __get($property_name) {
> if (property_exists($this, $property_name)) { return $this->$property_name; }
> else if (isset($_properties[$property_name])) { return
> $_properties[$property_name]; }
> return null;
> }
> }
> $options = array
> (
> 'hostname' => 'localhost',
> 'port' => 8983,
> 'path' => '/solr/'
> );
> $client = new SolrClient($options);
> $client->setResponseWriter("phpnative");
> $response = $client->ping();
> $query = new SolrQuery();
> $query->setQuery(":");
> $query->set("objectClassName", "SolrClass");
> $query->set("objectPropertiesStorageMode", 1);
> $response = $client->query($query);
> $resp = $response->getResponse();
> ?>
> <code>
> Documentation of the changes to the PECL extension are available here
> http://docs.php.net/manual/en/solrclient.construct.php
> http://docs.php.net/manual/en/solrclient.setresponsewriter.php
> Please contact me at [email protected], if you have any questions or comments.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]