Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在sunspot/solr全文搜索中转义非法字符?_Ruby On Rails 3_Search_Solr_Sunspot - Fatal编程技术网

Ruby on rails 3 如何在sunspot/solr全文搜索中转义非法字符?

Ruby on rails 3 如何在sunspot/solr全文搜索中转义非法字符?,ruby-on-rails-3,search,solr,sunspot,Ruby On Rails 3,Search,Solr,Sunspot,我有一个用于全文搜索模型属性的sunspot/solr设置。我的QA刚刚搜索了“和+,这两个都导致了500个错误: 回复:orgap>orgap>orgap>orgap>orgap>orgap>orgap>r回复回复:orgap>orgap>orgap>orgap>orgap>orgaporgap>orgap>orgap>orcocop>无法解析,无法解析,无法解析,遇到了,在线路上的线上,1柱上,1柱上,列上,0 0,你,0 0,0,你是,0,你是,你是,你期待,你,你是,你是,你期待,你期待

我有一个用于全文搜索模型属性的sunspot/solr设置。我的QA刚刚搜索了“和+,这两个都导致了500个错误:

回复:
orgap>orgap>orgap>orgap>orgap>orgap>orgap>r回复回复:
orgap>orgap>orgap>orgap>orgap>orgap
orgap>orgap>orgap>orcocop>无法解析,无法解析,无法解析,遇到了,在线路上的线上,1柱上,1柱上,列上,0 0,你,0 0,0,你是,0,你是,你是,你期待,你,你是,你是,你期待,你期待,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,一个,对的,_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


如何使这些查询字符串安全?Sunspot中是否有处理此问题的方法?

Sunspot中没有过滤这些字符串的方法,因为它们在某些类型的Lucene查询中有效。Sunspot默认使用,因此您可以阅读其文档以了解有关这些字符的更多信息

[]旨在支持用户提供的原始输入字符串,无需特殊转义。'+'和'-'字符被视为后续术语的“必需”和“禁止”修饰符。用平衡引号字符包装的文本'''被视为短语[…]

如果您不打算使用这些字符,您可以自己从查询中筛选它们(反斜杠是转义减号)


如果你在控制器中调用Sunspot的
search
方法,或者如果你在你的类自己的自定义
search
方法中调用Sunspot的
solr\u search
方法,那么你可能需要将其封装在控制器方法中。

可能重复的代码,但更明智的是,更聪明的人把它传给了我:
“abc+-/def”.gsub(/[+\-“\/]/){c}“\\”+c}输出=>abc\+-/def
,这实际上会转义字符,以防您在搜索Solr时试图使用这些字符。
Post.search do
  keywords params[:q].gsub(/[+\-"]/,'')
end