【问题标题】:PHP curl_setopt() is not returning the exact result_array from SOLRPHP curl_setopt() 没有从 SOLR 返回确切的 result_array
【发布时间】:2016-11-25 06:32:03
【问题描述】:

我正在使用 PHP cURLSolr 检索搜索结果数组。

 - cURL Version : 7.47.1 

以下代码正在搜索特定城市的总商店。 请看我的代码..

    $ch1 = curl_init();
    curl_setopt($ch1, CURLOPT_URL, "http://localhost:8983/solr/Search/select?q=searchshop%3A*&fq=" . $encode_fq_city . "&wt=php&fl=LoginInfoId");
    curl_setopt($ch1, CURLOPT_HEADER, false);
    curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
    $shop = curl_exec($ch1);
    curl_close($ch1);

    print_r($shop);

我使用print_r $shop_arr 数组,结果只显示了 10 条记录。实际的 Solr result_array 包含 14 条记录。

还附加了结果数组..

            [response] => Array
                (
                    [numFound] => 14
                    [start] => 0
                    [docs] => Array
                        (
                            [0] => Array
                                (
                                    [LoginInfoId] => 246
                                )

                            [1] => Array
                                (
                                    [LoginInfoId] => 230
                                )

                            [2] => Array
                                (
                                    [LoginInfoId] => 236
                                )

                            [3] => Array
                                (
                                    [LoginInfoId] => 217
                                )

                            [4] => Array
                                (
                                    [LoginInfoId] => 241
                                )

                            [5] => Array
                                (
                                    [LoginInfoId] => 219
                                )

                            [6] => Array
                                (
                                    [LoginInfoId] => 239
                                )

                            [7] => Array
                                (
                                    [LoginInfoId] => 231
                                )

                            [8] => Array
                                (
                                    [LoginInfoId] => 232
                                )

                            [9] => Array
                                (
                                    [LoginInfoId] => 257
                                )

                        )

                )

结果显示[numfound]=14,但只有10条记录。

在我的场景中将result_array 从 Solr 获取到 PHP 是否有任何错误?

这是一个 cURL 错误吗?

【问题讨论】:

  • 您的查询是否可能限制了退货数量? db 查询中是否有 LIMIT?
  • 是的。这是可能的。但我没有设置任何东西! numFound 也是 14,只显示 10。
  • 嗯,cURL 方面看起来不错,我的假设是它在端点上被破坏了。我也不确定你为什么要使用那个 Eval - 为什么不只是 $shoparr = $shop; ??
  • 也尝试使用$shop。结果还是一样。
  • 相同的结果,只是更干净。那里不需要 Eval 语句。如果可能,您还应该考虑使用 json 编码/解码(这里不会是问题)。你能从你的端点发布代码吗?

标签: php arrays curl php-curl


【解决方案1】:

Solr 默认返回 10 个文档:

此参数用于对查询结果进行分页。它指定从完整结果集中为每个请求返回给客户端的最大文档数。您可以将其视为页面中出现的最大结果数。

默认值为“10”,不指定参数时使用。如果您想告诉 Solr 从查询中返回所有可能的结果而没有上限,请将行数指定为 10000000 或其他一些比预期的可能行数更高的大得离谱的值。

所以在查询中添加一个 rows 参数,例如 rows=100:

curl_setopt($ch1, CURLOPT_URL, "http://localhost:8983/solr/Search/select?q=searchshop%3A*&fq=" . $encode_fq_city . "&wt=php&fl=LoginInfoId&rows=100");

参考资料:

更新:如果您想进行永久更改,您可以通过编辑 solrconfig.xml 来配置 Solr,有关行示例,请参阅:

【讨论】:

  • 它有效! MR.Kaylined 也帮助了我。还有一个问题..我是否需要在每个 Solr 查询中明确设置它,还是有任何其他选项可以使用 solr config 进行设置?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多