Solr Sanitizing запрос - PullRequest
       19

Solr Sanitizing запрос

5 голосов
/ 15 июля 2009

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

Ответы [ 3 ]

7 голосов
/ 16 июля 2009

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

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

РЕДАКТИРОВАТЬ: Вот несколько "дезинфицирующих средств":

3 голосов
/ 17 июля 2009

Страницы Solr Security и Solr Query могут быть релевантными

1 голос
/ 30 сентября 2013

Если вы используете 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...