我在轨道上使用 solr 和 ruby。一切正常,我只需要知道是否有任何现有代码来清理用户输入,例如以 ? 开头的查询 或者 *
问问题
4449 次
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 回答