【发布时间】:2009-07-15 19:50:19
【问题描述】:
我正在使用 solr 和 ruby on rails。 一切正常,我只需要知道是否有任何现有代码来清理用户输入,例如以 ? 开头的查询或 *
【问题讨论】:
标签: ruby-on-rails ruby solr
我正在使用 solr 和 ruby on rails。 一切正常,我只需要知道是否有任何现有代码来清理用户输入,例如以 ? 开头的查询或 *
【问题讨论】:
标签: ruby-on-rails ruby solr
我不知道有什么代码可以做到这一点,但理论上可以通过查看 parsing code in Lucene 并搜索 throw new ParseException 来完成(只有 16 个匹配项!)。
在实践中,我认为您最好在代码中捕获任何 solr 异常并显示“无效查询”消息或类似的信息。
编辑:这里有几个“消毒剂”:
【讨论】:
如果您在 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);
}
【讨论】: