Запрос SOLR с необработанными данными и объединением нескольких значений фасетов - PullRequest
1 голос
/ 12 апреля 2011

Я пишу запрос SOLR для фасетного поиска, и мои поля могут содержать кавычки или другие недопустимые символы, поэтому я использую оператор raw для построения запроса. Однако, если пользователь выбирает несколько значений фасетов, я не вижу, как использовать ИЛИ в запросе.

Например, следующий результат возвращает Производитель Nike:

{!raw f=Manufacturer}Nike

Следующие результаты возвращаются только для производителя Adidas:

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

И следующее не дает результатов:

{!raw f=Manufacturer}Nike OR Adidas

Есть ли способ сделать это?

1 Ответ

2 голосов
/ 12 апреля 2011

Рассматривали ли вы экранирование специальных символов вместо использования оператора raw?http://lucene.apache.org/java/2_4_0/queryparsersyntax.html#Escaping%20Special%20Characters

Экранирование довольно просто реализовать, и оператор ИЛИ должен работать как положено.Вот пример того, как экранировать специальные символы в 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-запрос-Solr-URL /

...