Как избежать недопустимых символов в полнотекстовом поиске sunspot / solr? - PullRequest
3 голосов
/ 15 августа 2011

У меня есть настройка 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____________

Как я могу сделать эти строки запроса безопасными? Есть ли метод в Sunspotсправиться с этим?

1 Ответ

5 голосов
/ 16 августа 2011

В Sunspot нет метода для их фильтрации, потому что они действительны в определенных видах запросов Lucene.Sunspot по умолчанию использует DisMax Query Parser , поэтому вы можете прочитать его документацию, чтобы узнать больше об этих символах.

[ DisMax ] предназначен длябыть поддерживает необработанные строки ввода, предоставляемые пользователями без специального экранирования.Символы «+» и «-» рассматриваются как «обязательные» и «запрещенные» модификаторы для последующих терминов.Текст, заключенный в символы сбалансированной кавычки '"', обрабатываются как фразы […]

Если вы не собираетесь использовать эти символы, вы можете самостоятельно отфильтровать их по запросам (обратная косая черта - экранировать знак минус).).

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

Возможно, вы захотите обернуть это в методе контроллера, если вы вызываете метод search Sunspot внутри контроллера, или метод модели, если вы вызываете метод solr_search Sunspot.из собственного пользовательского метода search вашего класса.

...