2009-07-15 40 views
5

Tôi đang sử dụng solr với ruby ​​trên đường ray. Mọi thứ đều hoạt động tốt, tôi chỉ cần biết liệu có bất kỳ mã nào hiện có để vệ sinh đầu vào của người dùng, như truy vấn bắt đầu bằng không? hoặc *solr khử trùng truy vấn

Trả lời

7

Tôi không biết mã nào thực hiện điều này, nhưng về mặt lý thuyết, có thể thực hiện bằng cách xem parsing code in Lucene và tìm kiếm throw new ParseException (chỉ 16 kết quả phù hợp!).

Trong thực tế, tôi nghĩ bạn tốt hơn là chỉ bắt bất kỳ ngoại lệ nào trong mã của bạn và hiển thị thông báo "truy vấn không hợp lệ" hoặc nội dung tương tự.

EDIT: Dưới đây là một vài "vệ sinh":

1

Nếu bạn đang sử dụng Solarium bằng PHP thì bạn có thể sử dụng phương thức 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); 
} 
Các vấn đề liên quan