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