$cat = 'tv - Episode';
$user_id = 1;
$delsolrobj = new SolrFunctions();
$delsolrobj->deleteSolrQuery("cat: ".$cat." AND sku:" . $user_id . " AND content_id:" . $_REQUEST['movie_id'] . " AND stream_id:" . $epData->id);
我发布了我的solr删除PHP代码。上面的代码我在页面中收到此错误消息。
'400' Status: Bad Request
我确信问题来自$cat
因为有一些空格。
我用谷歌搜索找到了一个解决方案,他们将你的类别放在括号内。我已经完成了这段代码:
$delsolrobj->deleteSolrQuery("cat: (".$cat.") AND sku:" . $user_id . " AND content_id:" . $_REQUEST['movie_id'] . " AND stream_id:" . $epData->id);
现在我上面的行代码工作正常,没有任何错误消息。但是我的记录没有从Solr删除。
请帮帮我。
答案 0 :(得分:0)
尝试此查询:(当空格存在时,您也可以使用引号)
$delsolrobj->deleteSolrQuery("cat:'".$cat."' AND sku:" . $user_id . " AND content_id:" . $_REQUEST['movie_id'] . " AND stream_id:" . $epData->id);
答案 1 :(得分:0)
你必须正确地转义这些值,这样即使有空格或引号,你也不会运行一个生成错误的查询(即如果一个类别突然有' OR -cat:foo
或类似的东西)
如果你没有使用Solr库(它应该有一个转义函数,你可以使用ad hoc版本:
function escapeSolrValue($string)
{
$match = array('\\', '+', '-', '&', '|', '!', '(', ')', '{', '}', '[', ']', '^', '~', '*', '?', ':', '"', ';', ' ');
$replace = array('\\\\', '\\+', '\\-', '\\&', '\\|', '\\!', '\\(', '\\)', '\\{', '\\}', '\\[', '\\]', '\\^', '\\~', '\\*', '\\?', '\\:', '\\"', '\\;', '\\ ');
$string = str_replace($match, $replace, $string);
return $string;
}