[英]Solr commands not returning json output
I was going through the php documentation for solr and wanted to try out the basic example. 我正在浏览solr的php文档,并想尝试一下基本示例。 But the expected output isn't received and a blank page is returned when i try the following code with my existing project. 但是当我在现有项目中尝试以下代码时,未收到预期的输出,并且返回空白页。
<?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 bootstrap.php goes something like this: bootstrap.php是这样的:
/* Domain name of the Solr server */
define('SOLR_SERVER_HOSTNAME', 'localhost');
/* Whether or not to run in secure mode */
define('SOLR_SECURE', false);
/* HTTP Port to connection */
define('SOLR_SERVER_PORT', ((SOLR_SECURE) ? 8443 : 8080));
/* 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/');
?>
I'm using the tomcat username and password for solr_server_username/password. 我正在使用solr_server_username / password的tomcat用户名和密码。 and solr is working fine otherwise on the UI. solr在UI上可以正常工作。 I am using solr 4.6.1 with php solrclient 1.0.2 我正在将solr 4.6.1与php solrclient 1.0.2一起使用
<?php
// make sure browsers see this page as utf-8 encoded HTML
header('Content-Type: text/html; charset=utf-8');
$limit = 10;
$query = isset($_REQUEST['q']) ? $_REQUEST['q'] : false;
$results = false;
if ($query)
{
// The Apache Solr Client library should be on the include path
// which is usually most easily accomplished by placing in the
// same directory as this script ( . or current directory is a default
// php include path entry in the php.ini)
require_once('/usr/local/apache-tomcat-7.0.50/SolrPhpClient/Apache/Solr/Service.php');
// create a new solr service instance - host, port, and webapp
// path (all defaults in this example)
$solr = new Apache_Solr_Service('localhost', 8080, '/solr/collection1');
// if magic quotes is enabled then stripslashes will be needed
if (get_magic_quotes_gpc() == 1)
{
$query = stripslashes($query);
}
// in production code you'll always want to use a try /catch for any
// possible exceptions emitted by searching (i.e. connection
// problems or a query parsing error)
try
{
$results = $solr->search($query, 0, $limit);
}
catch (Exception $e)
{
// in production you'd probably log or email this error to an admin
// and then show a special message to the user but for this example
// we're going to show the full exception
die("<html><head><title>SEARCH EXCEPTION</title><body><pre>{$e->__toString()}</pre></body></html>");
}
}
?>
<html>
<head>
<title>PHP Solr Client Example</title>
</head>
<body>
<h1>ABCD</h1>
<form accept-charset="utf-8" method="get">
<label for="q">Search:</label>
<input id="q" name="q" type="text" value="<?php echo htmlspecialchars($query, ENT_QUOTES, 'utf-8'); ?>"/>
<input type="submit"/>
</form>
<?php
// display results
if ($results)
{
$total = (int) $results->response->numFound;
$start = min(1, $total);
$end = min($limit, $total);
?>
<div>Results <?php echo $start; ?> - <?php echo $end;?> of <?php echo $total; ?>:</div>
<ol>
<?php
// iterate result documents
foreach ($results->response->docs as $doc)
{
?>
<li>
<table style="border: 1px solid black; text-align: left">
<?php
// iterate document fields / values
foreach ($doc as $field => $value)
{
?>
<tr>
<th><?php echo htmlspecialchars($field, ENT_NOQUOTES, 'utf-8'); ?></th>
<td><?php echo htmlspecialchars($value, ENT_NOQUOTES, 'utf-8'); ?></td>
</tr>
<?php
}
?>
</table>
</li>
<?php
}
?>
</ol>
<?php
}?>
While trying the above alternative code, the following error is encountered: 尝试上述替代代码时,遇到以下错误:
exception 'Apache_Solr_HttpTransportException' with message ''0' Status: Communication Error' in /usr/local/apache-tomcat-7.0.50/SolrPhpClient/Apache/Solr/Service.php:338 Stack trace: /usr/local/apache-tomcat-7.0.50/SolrPhpClient/Apache/Solr/Service.php:338中的异常“ Apache_Solr_HttpTransportException”,消息为“ 0”,状态:通信错误。
0 /usr/local/apache-tomcat-7.0.50/SolrPhpClient/Apache/Solr/Service.php(1170): 0 /usr/local/apache-tomcat-7.0.50/SolrPhpClient/Apache/Solr/Service.php(1170):
Apache_Solr_Service->_sendRawGet -
('http://localhos...')
Apache_Solr_Service-> _ sendRawGet-('http://localhos...')
1 /var/www/html/testproject/tryout.php(33): Apache_Solr_Service->search('abhilash', 0, 10) 1 /var/www/html/testproject/tryout.php(33):Apache_Solr_Service-> search('abhilash',0,10)
2 {main} 2 {main}
Solr's default response writer is XML. Solr的默认响应编写器是XML。
If you want to get back your results in JSON, you should specify it by defining the URL parameter wt=json 如果要以JSON格式获取结果,则应通过定义URL参数wt = json进行指定
Example 例
http://localhost:8983/solr/customers/select?q=customerSearchName&wt=json
Make sure that you do so. 确保您这样做。
You need to add 您需要添加
'wt' => 'json'
to the array you pass into SolrClient() 到传递给SolrClient()的数组
See http://php.net/manual/en/solrclient.construct.php 参见http://php.net/manual/en/solrclient.construct.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.