5

我在轨道上使用 solr 和 ruby​​。一切正常,我只需要知道是否有任何现有代码来清理用户输入,例如以 ? 开头的查询 或者 *

4

2 回答 2

7

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

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

编辑:这里有几个“消毒剂”:

于 2009-07-16T02:08:24.933 回答
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);
}
于 2013-09-30T12:36:35.650 回答