cfsearch — ошибка при выполнении запроса: org.apache.lucene.queryParser.ParseException: не удается разобрать: лексическая ошибка

У меня есть базовый cfsearch, который отлично работает, но иногда его можно сломать строками поиска, подобными следующим;

  • моя строка поиска]

  • "моя строка поиска

  • моя строка поиска[

  • мой поиск: строка

Любое из вышеперечисленного приведет к ошибке, например;

Ошибка при выполнении запроса: org.apache.lucene.queryParser.ParseException: невозможно проанализировать «мою строку поиска»: лексическая ошибка в строке 1, столбце 32. Обнаружено: после: «\»моя строка поиска»

Я думал, что могу убрать эти символы, но у вас может быть рабочий поисковый запрос, скажем, с двумя "" - т.е. "моя строка поиска" - это действительно так. Есть ли предпочтительный способ подготовить строку для cfsearch?

Итак, на примере:

"моя строка поиска

это удалит первый ". Но если бы поисковый запрос был:

"моя строка поиска"

все хорошо - оставь это в покое. Любые идеи?! Есть ли другие символы, которые могут вызвать ошибку? Например, хакер попробовал это;

XyOk,'.](.]]]'

Что вызвало ошибку.


person luke    schedule 08.01.2016    source источник
comment
В Lucence 4+ это все специальные символы + - && || ! ( ) { } [ ] ^ " ~ * ? : \ / см. lucene.apache.org/core/4_0_0/queryparser/org/apache/lucene/   -  person John Whish    schedule 08.01.2016
comment
спасибо Джон, приятно знать   -  person luke    schedule 11.01.2016


Ответы (1)


Используйте Пользовательскую функцию VerityClean из CFLib для очистки параметра поиска Verity/Lucene. (ПРИМЕЧАНИЕ. Добавьте :, ^ и * к переменной reBadChars с разделителями вертикальной чертой, чтобы они были удалены для Lucene.)

http://www.cflib.org/udf/verityClean

person James Moberg    schedule 08.01.2016