Php 向SolrQuery请求添加原始查询参数

Php 向SolrQuery请求添加原始查询参数,php,solr,Php,Solr,我正在使用with对象,但我需要向其中添加RawQueryParameters: 这是怎么做到的?我对Solr请求相当陌生,在文档中找不到这样的选项 到目前为止,我有: $SolrQuery = new \SolrQuery(); $SolrQuery->setStart($this->offset); $SolrQuery->setRows($this->limit); $SolrQuery->setQuery($request); $SolrQuery->

我正在使用with对象,但我需要向其中添加RawQueryParameters:

这是怎么做到的?我对Solr请求相当陌生,在文档中找不到这样的选项

到目前为止,我有:

$SolrQuery = new \SolrQuery();
$SolrQuery->setStart($this->offset);
$SolrQuery->setRows($this->limit);
$SolrQuery->setQuery($request);
$SolrQuery->addField('*')->addField('units:[subquery]');
$SolrQuery->addParam('units.q', '{!terms%20f=id%20v=$row.unit_ids}');
在这个对象上运行
toString()
时,我得到:

start=0&rows=2147483647&q=type:address&fl=*,units:[subquery]&units.q={!terms%20f=id%20v=$row.unit_ids}
什么是正确的查询。这在CLI中运行良好,但在PHP中执行时会出现异常,如
$queryResponse=$SolrClient->query($SolrQuery)


编辑:解决方案是使用
addParam()
而不使用urlcoded请求。空间过得很好

您可以通过在
SolrQuery
对象上调用
->toString()
来获取活动参数-由于
SolrQuery
继承自
SolrModifiableParams
,您可以直接在查询对象上调用
addParam
,以添加自定义参数。这允许您向请求添加任何想要的参数。小心添加参数verbatim,因为SolrQuery应该为您处理必要的转义

如果仍然看到错误,可以检查Solr服务器上的日志记录(在Admin->logging下)。如果日志级别设置为
INFO
,Solr将记录所有请求,以便您可以查看Solr实际得到了什么。如果异常是在Solr端生成的,则该日志中也应存在异常


Solr扩展通常会将异常作为类
SolrClientException
抛出,这对于确定错误源非常有用。A如果需要进一步调试。

setParam
addParam
中的
SolrModifiableParams
应该做您想做的事情-如何使用它们?您是否检查了服务器端的Solr日志以查看是否包含任何内容?(也就是说,这可能是一个转义问题吗?)嗯,你知道是否有打印脚本将要执行的最终查询的选项吗?我会看Solr日志,只要你将日志级别设置为
INFO
,它就会准确地告诉你它收到了什么查询。它在管理界面的“日志”下可用。对于查询对象,您可以尝试调用
->toString()
var\u dump
结果。@MatsLindh谢谢,
toString()
工作正常,它确实创建了正确的查询。我也在cli中尝试过,效果很好,但在PHP中执行时,会出现异常。是否需要为
$queryResponse=$SolrClient->query($SolrQuery)添加一些参数请求?甚至可能是一个不同的执行请求?当请求发送到远程服务器时,我目前无法轻松获取Solr日志,但我确实仔细比较了参数。原来我用的是
{!terms%20f=id%20v=$row.unit\u ids}
,但我不需要对它进行编码:
{!terms f=id v=$row.unit\u ids}
就像一个符咒。如果你能给出一个简短的回答,我很乐意接受。干杯
Exception: while invoking units:[subquery] on doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS