gpt4 book ai didi

php - 当我在 php 中尝试 Solr 时出现问题

转载 作者:行者123 更新时间:2023-12-04 15:47:44 26 4
gpt4 key购买 nike

当我在 PHP 中运行示例时遇到问题,代码如下:

<?php
require_once( 'SolrPhpClient/Apache/Solr/Service.php' );

//
//
// Try to connect to the named server, port, and url
//
$solr = new Apache_Solr_Service( 'localhost', '8983', '/solr/' );

if ( ! $solr->ping() ) {
echo 'Solr service not responding.';
exit;
}

//
//
// Create two documents to represent two auto parts.
// In practice, documents would likely be assembled from a
// database query.
//
$parts = array(
'spark_plug' => array(
'partno' => 1,
'name' => 'Spark plug',
'model' => array( 'Boxster', '924' ),
'year' => array( 1999, 2000 ),
'price' => 25.00,
'inStock' => true,
),
'windshield' => array(
'partno' => 2,
'name' => 'Windshield',
'model' => '911',
'year' => array( 1999, 2000 ),
'price' => 15.00,
'inStock' => false,
)
);

$documents = array();

foreach ( $parts as $item => $fields ) {
$part = new Apache_Solr_Document();

foreach ( $fields as $key => $value ) {
if ( is_array( $value ) ) {
foreach ( $value as $datum ) {
$part->setMultiValue( $key, $datum );
}
}
else {
$part->$key = $value;
}
}

$documents[] = $part;
}

//
//
// Load the documents into the index
//
try {
$solr->addDocuments( $documents );
$solr->commit();
$solr->optimize();
}
catch ( Exception $e ) {
echo $e->getMessage();
}

//
//
// Run some queries. Provide the raw path, a starting offset
// for result documents, and the maximum number of result
// documents to return. You can also use a fourth parameter
// to control how results are sorted and highlighted,
// among other options.
//
$offset = 0;
$limit = 10;

$queries = array(
'partno: 1 OR partno: 2',
'model: Boxster',
'name: plug'
);

foreach ( $queries as $query ) {
$response = $solr->search( $query, $offset, $limit );

if ( $response->getHttpStatus() == 200 ) {
// print_r( $response->getRawResponse() );

if ( $response->response->numFound > 0 ) {
echo "$query <br />";

foreach ( $response->response->docs as $doc ) {
echo "$doc->partno $doc->name <br />";
}

echo '<br />';
}
}
else {
echo $response->getHttpStatusMessage();
}
}
?>

但是一旦运行就会出现如下错误:

'400' Status: Bad Request
Fatal error: Uncaught exception 'Apache_Solr_HttpTransportException' with message ''400' Status: Bad Request' in C:\software\study\php\xampp\xampp\htdocs\SolrPhpClient\Apache\Solr\Service.php:338 Stack trace: #0 C:\software\study\php\xampp\xampp\htdocs\SolrPhpClient\Apache\Solr\Service.php(1170): Apache_Solr_Service->_sendRawGet('http://localhos...') #1 C:\software\study\php\xampp\xampp\htdocs\solr1.php(98): Apache_Solr_Service->search('partno: 1 OR pa...', 0, 10) #2 {main} thrown in C:\software\study\php\xampp\xampp\htdocs\SolrPhpClient\Apache\Solr\Service.php on line 338

可能是什么问题。

感谢所有帮助。

最佳答案

您可能有 (a) 错误的查询语法,或 (b) 错误配置的索引。

检查您的索引

看起来您有零件号、型号等字段。您需要确保在您的 schema.xml 中配置了这些字段.我可能猜想您没有在那里创建它们,因此您的文档提交失败,或者您有一个模型字段,但它不是多值的。

如果它通过了文件提交,那么你可能有一个查询问题......

调试查询

调试查询的最简单方法是在发送之前回显查询。在这种情况下:

 echo $query

从中获取输出并点击:

 http://localhost:8983/solr/select?q=<query>

(echo 语句中的查询在哪里)。

您可能会遇到 400 错误。我的猜测是你在某个地方有一个错误的字段名称,或者在你的查询中使用了无效的语法。如果您可以发布 $query,则可以更轻松地帮助解决问题。

关于php - 当我在 php 中尝试 Solr 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6227407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com