我有一个sunspot / solr设置全文搜索模型属性。我的QA刚搜索了“和+,两者都导致了500错误:
Solr响应:orgapachelucenequeryParserParseException_Cannot_parse__Encountered_EOF_at_line_1_column_0_Was_expecting_one_of_____NOT______________________________QUOTED______TERM______PREFIXTERM______WILDTERM__________________NUMBER______TERM____________
如何使这些查询字符串安全?太阳黑子有没有办法解决这个问题?
答案 0 :(得分:5)
Sunspot中没有方法可以过滤那些,因为它们在某些类型的Lucene查询中有效。太阳黑子默认使用DisMax Query Parser,因此您可以阅读其文档以了解有关这些角色的更多信息。
[DisMax]旨在支持用户提供的原始输入字符串,无需特殊转义。 “+”和“ - ”字符被视为后续术语的“强制”和“禁止”修饰符。包含在平衡引号字符中的文字“”被视为短语[...]
如果您打算永远不要使用这些字符,您可以自己从查询中过滤它们(反斜杠是逃避减号)。
Post.search do
keywords params[:q].gsub(/[+\-"]/,'')
end
如果您在控制器中调用太阳黑子的search
方法,或者如果您在班级中调用太阳黑子的solr_search
方法,则可能需要将其包装在控制器方法中。拥有自定义search
方法。