我正在将SolrClient与SolrQuery对象一起使用,但需要向其添加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);
的身份执行时会给出异常:
Exception: while invoking units:[subquery] on doc=SolrDocument{id=stored,indexed,tokenized,omitNorms,indexOptions=DOCS
编辑:解决方案是使用addParam()
而不使用urlcoded请求。空格就可以了!
答案 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。