1

我正在为多面搜索编写 SOLR 查询,并且我的字段中可能包含引号或其他错误字符,因此我使用原始运算符来构造查询。但是,如果用户选择多个方面值,我看不到如何在查询中使用 OR。

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

{!raw f=Manufacturer}Nike

以下仅返回阿迪达斯制造商的结果:

{!raw f=Manufacturer}Nike OR {!raw f=Manufacturer}Adidas

以下不返回任何结果:

{!raw f=Manufacturer}Nike OR Adidas

有没有办法做到这一点?

4

1 回答 1

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/

于 2011-04-12T17:07:02.080 回答