2012-07-19 141 views
2

变更请求处理我使用的是默认的PHP Solr的客户: http://php.net/manual/en/book.solr.php 截至目前为止,结果是惊人的,所以我决定继续使用Solr的,并制定了“建议者”服务:如何使用PHP PECL扩展Solr的

我做了根据: http://wiki.apache.org/solr/Suggester/ 它也工作得很好 - 但我不知道如何查询它使用PHP客户端。

这是我如何查询文件:

http://localhost:8080/solr/subject_offers/select/?q=string_to_search 

这是我的查询建议:

http://localhost:8080/solr/subject_offers/suggest/?q=string_to_suggest 

正如你所看到的,建议的服务有不同的RequestHandler(称为“建议“)。 如何在客户端上更改它?

更新: 我使用cURL从Solr中检索响应XML。 但我仍然想要返回一个Solr响应对象,所以我使用“SolrUtils :: digestXmlResponse($ xml,SolrResponse :: PARSE_SOLR_OBJ)”。 不幸的是我得到的“错误未序列化响应”错误一个有效的XML:

<response><lst name="responseHeader"><int name="status">0</int><int name="QTime">2</int></lst><lst name="spellcheck"><lst name="suggestions"><lst name="the"><int name="numFound">1</int><int name="startOffset">9</int><int name="endOffset">12</int><arr name="suggestion"><str>the</str></arr></lst><lst name="the"><int name="numFound">1</int><int name="startOffset">33</int><int name="endOffset">36</int><arr name="suggestion"><str>the</str></arr></lst><lst name="collation"><str name="collationQuery">name:for the d^5 description:for the d^0.4</str><int name="hits">1</int><lst name="misspellingsAndCorrections"><str name="the">the</str><str name="the">the</str></lst></lst></lst></lst><result name="response" numFound="1" start="0"><doc><str name="1_on_1_price">9,USD</str><float name="avarage_rating">0.0</float><arr name="categories"><str>2,2,3</str></arr><int name="category_id">3</int><arr name="description"><str>was named for the directo</str><str>The Manchesowned by Peel Ports</str></arr><bool name="is_public">true</bool><str name="language">he</str><int name="lesson_type">0</int><str name="name">was named for the directo</str><int name="subject_id">12</int></doc></result></response> 

请指教,谢谢 !

回答

5

我有同样的问题,我发现在源代码中的答案。解决方法是:

$client = new SolrClient($options); 
$client->setServlet(SolrClient::SEARCH_SERVLET_TYPE, "request_handler_name"); 
0

您可以使用PHP的CURL扩展来执行此操作。一个小例子是:

$url = 'http://localhost:8080/solr/subject_offers/select/?'; 
$to_post = array('q' => urlencode('string_to_search'), 
       'other'=> urlencode('somthing_else')); 
foreach($to_post as $key=>$value) { 
    $string .= $key.'='.$value.'&'; 
} 
rtrim($string, '&'); 

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,$url); 
curl_setopt($ch,CURLOPT_POST,count($to_post)); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$string); 

$result = curl_exec($ch); 
curl_close($ch); 

希望帮助...

+0

我知道我可以使用cURL,但我更喜欢使用实际的库。 – eldad87 2012-07-19 23:04:05

+0

我试图使用cURL,但也继续使用Solr对象响应值,所以我试图使用: http://www.php.net/manual/en/solrutils.digestxmlresponse.php 这反过来导致使用parse_mod of SolrResponse :: PARSE_SOLR_OBJ解析有效响应XML时出现错误“un-serializing response错误” – eldad87 2012-07-20 14:15:34