solr清理查询

时间:2009-07-15 19:50:20

标签: ruby-on-rails ruby solr

我在铁轨上使用带有红宝石的solr。 它运行良好,我只需要知道是否有任何现有的代码来清理用户输入,比如以查询开头?或者*

3 个答案:

答案 0 :(得分:7)

我不知道有任何代码可以做到这一点,但理论上可以通过查看parsing code in Lucene并搜索throw new ParseException(只有16个匹配!)来完成。

在实践中,我认为您最好只是在代码中捕获任何solr异常并显示“无效查询”消息或类似内容。

编辑:以下是一些“消毒剂”:

答案 1 :(得分:3)

Solr SecuritySolr 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);
}