如何在太阳黑子/ solr全文搜索中逃避非法字符?

时间:2011-08-15 19:41:28

标签: ruby-on-rails-3 search solr sunspot

我有一个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____________

如何使这些查询字符串安全?太阳黑子有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:5)

Sunspot中没有方法可以过滤那些,因为它们在某些类型的Lucene查询中有效。太阳黑子默认使用DisMax Query Parser,因此您可以阅读其文档以了解有关这些角色的更多信息。

  

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

如果您打算永远不要使用这些字符,您可以自己从查询中过滤它们(反斜杠是逃避减号)。

Post.search do
  keywords params[:q].gsub(/[+\-"]/,'')
end

如果您在控制器中调用太阳黑子的search方法,或者如果您在班级中调用太阳黑子的solr_search方法,则可能需要将其包装在控制器方法中。拥有自定义search方法。