在没有命令行cURL的情况下在solr中计数distinct

时间:2016-08-18 15:41:06

标签: php curl solr

如何从他们的网站http://yonik.com/solr-count-distinct/获取solr中的唯一计数,以及从这个SO答案中得到一个非常好的答案:How to select distinct field values using Solr?

我的问题是我不明白如何将这个cURL语法翻译成PHP,这就是我编写的代码。

官方示例似乎很容易从在此代码视角中发生的事情开始:

$ curl http://localhost:8983/solr/techproducts/query -d '
q=*:*&
json.facet={
  x : "unique(manu_exact)"    // manu_exact is the manufacturer indexed as a single string
}'

但是,我只熟悉使用PHP向我的服务器提交solr查询的两种方法。第一种,使用直接URL:

$url = "localhost:8983/solr/asdf/select?q=*:*";
$Q = curl_init();      
curl_setopt($Q, CURLOPT_RETURNTRANSFER, true);        
curl_setopt($Q, CURLOPT_URL, $url);
$rawData = curl_exec($Q);
$data =  json_decode($rawData,true);

或通过发布值:

$url     = "localhost:8983/solr/asdf/select";
$solr_q  = "q=date_range:[2016+TO+*]&fq=title:manager&wt=json&indent=true";

$ch      = curl_init();
curl_setopt($ch, CURLOPT_POSTFIELDS, $solr_q);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);        
curl_setopt($ch, CURLOPT_URL, $url);
$rawData = curl_exec($ch);
$json = json_decode($rawData,true);

我正在运行solr 5.4.1,所以我知道我有能力做json facet,但我不知道如何使用命令行curl在官方示例之外发出请求。如何以与我目前在PHP中使用solr相同的方式使用此json.facet

1 个答案:

答案 0 :(得分:2)

一如既往 - 在您发布SO之后,您就会找到答案。如果有人仍然可以为我做一些更好的方式,我会非常感激 - 但这在技术上可以作为一个直接的URL:

http://localhost:8983/solr/asdf/select?q=*:*&json.facet.x="unique(field)"&wt=json&indent=true&rows=0

或使用我在OP中使用的语法:

...
$url    = "http://localhost:8983/solr/asdf/select";
  $post   = "q=*:*&json.facet.x=\"unique(field)\"&rows=0&wt=json&indent=true";
...

我缺少的是:

  1. 我必须为json facet命名,(&json.facet.x=而不是&json.facet={ }字符需要用引号" "替换,以便查询到作为URL或POST请求工作。
  2. 我真的希望这对某人有所帮助,因为它让我感到沮丧,因为现在大约一个月没有结束.....

相关问题