我正在为分面搜索编写SOLR查询,我的字段可能包含引号或其他不良字符,因此我使用原始运算符构造查询。但是,如果用户选择多个构面值,我无法看到如何在查询中使用OR。
例如,以下内容返回Nike制造商的结果:
{!raw f=Manufacturer}Nike
以下仅针对阿迪达斯制造商返回结果:
{!raw f=Manufacturer}Nike OR {!raw f=Manufacturer}Adidas
以下不会返回任何结果:
{!raw f=Manufacturer}Nike OR Adidas
有办法做到这一点吗?
答案 0 :(得分:2)
您是否考虑过转义特殊字符,而不是使用原始运算符? http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters
实现转义非常简单,OR运算符应该按预期工作。 这是一个如何在PHP中转义特殊字符的示例:
static public function escapeSolrValue($string)
{
$match = array('\\', '+', '-', '&', '|', '!', '(', ')', '{', '}', '[', ']', '^', '~', '*', '?', ':', '"', ';', ' ');
$replace = array('\\\\', '\\+', '\\-', '\\&', '\\|', '\\!', '\\(', '\\)', '\\{', '\\}', '\\[', '\\]', '\\^', '\\~', '\\*', '\\?', '\\:', '\\"', '\\;', '\\ ');
$string = str_replace($match, $replace, $string);
return $string;
}
来源:http://e-mats.org/2010/01/escaping-characters-in-a-solr-query-solr-url/