Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用原始数据和union多方面值的SOLR查询_Solr_Faceted Search - Fatal编程技术网

使用原始数据和union多方面值的SOLR查询

使用原始数据和union多方面值的SOLR查询,solr,faceted-search,Solr,Faceted Search,我正在为分面搜索编写一个SOLR查询,我的字段中可能有引号或其他不好的字符,因此我使用raw操作符来构造查询。但是,如果用户选择多个方面的值,我看不出如何在查询中使用OR 例如,以下返回Nike制造商的结果: {!raw f=Manufacturer}Nike 以下仅返回阿迪达斯制造商的结果: {!raw f=Manufacturer}Nike OR {!raw f=Manufacturer}Adidas 并且以下结果不返回任何结果: {!raw f=Manufacturer}Nike OR

我正在为分面搜索编写一个SOLR查询,我的字段中可能有引号或其他不好的字符,因此我使用raw操作符来构造查询。但是,如果用户选择多个方面的值,我看不出如何在查询中使用OR

例如,以下返回Nike制造商的结果:

{!raw f=Manufacturer}Nike
以下仅返回阿迪达斯制造商的结果:

{!raw f=Manufacturer}Nike OR {!raw f=Manufacturer}Adidas
并且以下结果不返回任何结果:

{!raw f=Manufacturer}Nike OR Adidas

有没有办法做到这一点?

您是否考虑过转义特殊字符,而不是使用原始运算符?

转义实现起来非常简单,OR操作符应该按预期工作。 下面是一个如何在PHP中转义特殊字符的示例:

static public function escapeSolrValue($string)
{
    $match = array('\\', '+', '-', '&', '|', '!', '(', ')', '{', '}', '[', ']', '^', '~', '*', '?', ':', '"', ';', ' ');
    $replace = array('\\\\', '\\+', '\\-', '\\&', '\\|', '\\!', '\\(', '\\)', '\\{', '\\}', '\\[', '\\]', '\\^', '\\~', '\\*', '\\?', '\\:', '\\"', '\\;', '\\ ');
    $string = str_replace($match, $replace, $string);

    return $string;
}

来源:

当选择多个方面时,您应该构建多个筛选查询,而不是附加到主查询。@Mauricio:但是如果我添加另一个查询,它不会作为交叉点工作吗?在这个例子中,我需要合并Nike和阿迪达斯的结果。哎呀,我的错,没有仔细阅读,你是对的。我是第一次尝试这样做的,但我用这种方法也得到了不正确的结果。原始操作符似乎与此问题的例外情况一起工作,因此我将再次讨论转义。非常感谢。