Я пытаюсь реализовать следующее потоковое выражение с помощью PHP curl.
curl --data-urlencode 'expr=search(enron_emails,
q="from:1800flowers*",
fl="from, to",
sort="from asc",
qt="/export")' http://localhost:8983/solr/enron_emails/stream
Вышеупомянутый запрос curl из командной строки работает нормально.Однако, запуск того же самого с помощью php curl не работает.Я использовал следующий код PHP.
function streamSolrData() {
$url = 'http://localhost:8983/solr/enron_emails/stream';
$data['expr']['search'] = "enron_emails";
$data['expr']['search']['q'] = 'from:1800flowers*';
$data['expr']['search']['fl'] = "from, to";
$data['expr']['search']['sort'] = "from asc";
$data['expr']['search']['qt'] = "/export";
$data = json_encode($data);
$ch = curl_init();
if ($ch) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data))
);
$response = curl_exec($ch);
}
}
Выше запрос просто возвращает {"result-set":{"docs":[{"EXCEPTION":null,"EOF":true}]}}
без каких-либо результатов.
Есть идеи, что мне здесь не хватает?
Iнашел ответ на это.В идеале solr ожидает передачи одного параметра с именем expr.Ниже приводится решение.
РЕШЕНИЕ
function streamSolrData() {
$url = 'http://localhost:8983/solr/enron_emails/stream';
$data['expr'] = 'search(enron_emails,
q="from:1800flowers*",
fl="from, to",
sort="from asc",
qt="/export")'
$ch = curl_init();
if ($ch) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$response = curl_exec($ch);
}
}