我在铁轨上使用带有红宝石的solr。 它运行良好,我只需要知道是否有任何现有的代码来清理用户输入,比如以查询开头?或者*
答案 0 :(得分:7)
我不知道有任何代码可以做到这一点,但理论上可以通过查看parsing code in Lucene并搜索throw new ParseException
(只有16个匹配!)来完成。
在实践中,我认为您最好只是在代码中捕获任何solr异常并显示“无效查询”消息或类似内容。
编辑:以下是一些“消毒剂”:
答案 1 :(得分:3)
Solr Security和Solr Query Syntax个维基页面可能相关。
答案 2 :(得分:1)
如果您在PHP中使用Solarium,则可以使用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);
}