запрос очистки solr

Я использую solr с рубином на рельсах. Все работает хорошо, мне просто нужно знать, существует ли какой-либо существующий код для очистки пользовательского ввода, например, запрос, начинающийся с ? или *


person Ori    schedule 15.07.2009    source источник


Ответы (2)


Я не знаю никакого кода, который это делает, но теоретически это можно сделать, просмотрев разбор кода в Lucene и поиск throw new ParseException (всего 16 совпадений!).

На практике, я думаю, вам лучше просто перехватывать любые исключения solr в своем коде и показывать недопустимое сообщение запроса или что-то в этом роде.

РЕДАКТИРОВАНИЕ: вот пара дезинфицирующих средств:

person Mauricio Scheffer    schedule 16.07.2009

Если вы используете Solarium с PHP, вы можете использовать метод Solarium_Escape::term().

/**
 * Escape a term
 *
 * A term is a single word.
 * All characters that have a special meaning in a Solr query are escaped.
 *
 * If you want to use the input as a phrase please use the {@link phrase()}
 * method, because a phrase requires much less escaping.\
 *
 * @link http://lucene.apache.org/java/docs/queryparsersyntax.html#Escaping%20Special%20Characters
 *
 * @param string $input
 * @return string
 */
static public function term($input)
{
    $pattern = '/(\+|-|&&|\|\||!|\(|\)|\{|}|\[|]|\^|"|~|\*|\?|:|\\\)/';

    return preg_replace($pattern, '\\\$1', $input);
}
person crmpicco    schedule 30.09.2013