2

デフォルトの PHP Solr クライアントを使用しています: http://php.net/manual/en/book.solr.php 今までの結果は素晴らしいので、Solr を使い続けることにし、「suggester」サービスを開発することにしました。 :

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 (「suggest」と呼ばれます) があります。クライアントで変更するにはどうすればよいですか?

更新: Solr から応答 XML を取得するために cURL を使用しています。それでも、Solr 応答オブジェクトを返したいので、「SolrUtils::digestXmlResponse($xml, SolrResponse::PARSE_SOLR_OBJ)」を使用しています。残念ながら、有効な XML に対して「Error un-serializing response」というエラーが表示されます。

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

アドバイスしてください、ありがとう!

4

2 に答える 2

5

私は同じ問題を抱えていて、ソースコードで答えを見つけました。解決策は次のとおりです。

$client = new SolrClient($options);
$client->setServlet(SolrClient::SEARCH_SERVLET_TYPE, "request_handler_name");
于 2013-02-02T23:32:36.190 に答える
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);

お役に立てば幸いです...

于 2012-07-19T20:10:28.630 に答える