5

RailsでRubyを使用したSolrを使用しています。それはすべてうまく機能しています。ユーザー入力をサニタイズするための既存のコードがあるかどうかを知る必要があります。たとえば、?で始まるクエリなどです。また *

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 に答える