将原始查询参数添加到SolrQuery请求

时间:2018-06-28 08:29:57

标签: php solr

我正在将SolrClientSolrQuery对象一起使用,但需要向其添加RawQueryParameters: enter image description here

这是怎么做的?我是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);的身份执行时会给出异常:

Exception: while invoking units:[subquery] on doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS

编辑:解决方案是使用addParam()而不使用urlcoded请求。空格就可以了!

1 个答案:

答案 0 :(得分:1)

您可以通过在->toString()对象上调用SolrQuery来获得活动参数-由于SolrQuery继承自SolrModifiableParams,因此您可以直接在对象上调用addParam查询对象以添加自定义参数。这使您可以将所需的任何参数添加到请求中。请小心逐字添加参数,因为SolrQuery应该为您处理必要的转义。

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

Solr扩展通常会将异常作为类SolrClientException抛出,这对于确定错误源很有用。如果需要进一步调试,请使用list of exception messages are also available in the extension source