使用原始数据和union多方面值的SOLR查询
我正在为分面搜索编写一个SOLR查询,我的字段中可能有引号或其他不好的字符,因此我使用raw操作符来构造查询。但是,如果用户选择多个方面的值,我看不出如何在查询中使用OR 例如,以下返回Nike制造商的结果:使用原始数据和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
{!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和阿迪达斯的结果。哎呀,我的错,没有仔细阅读,你是对的。我是第一次尝试这样做的,但我用这种方法也得到了不正确的结果。原始操作符似乎与此问题的例外情况一起工作,因此我将再次讨论转义。非常感谢。