如果PHP中存在任何空格,则无法从Solr中删除记录

时间:2017-09-13 05:08:16

标签: php solr

$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删除。

请帮帮我。

2 个答案:

答案 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;
}