Я использую solr с рубином на рельсах. Все работает хорошо, мне просто нужно знать, существует ли какой-либо существующий код для очистки пользовательского ввода, например, запрос, начинающийся с ? или *
запрос очистки solr
Ответы (2)
Я не знаю никакого кода, который это делает, но теоретически это можно сделать, просмотрев разбор кода в Lucene и поиск throw new ParseException
(всего 16 совпадений!).
На практике, я думаю, вам лучше просто перехватывать любые исключения solr в своем коде и показывать недопустимое сообщение запроса или что-то в этом роде.
РЕДАКТИРОВАНИЕ: вот пара дезинфицирующих средств:
- http://pivotallabs.com/users/zach/blog/articles/937-sanitizing-solr-requests
- http://github.com/jvoorhis/lucene_query
- http://e-mats.org/2010/01/escaping-characters-in-a-solr-query-solr-url/
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