Ерунда. C и программисты Lisp используют синтаксический сахар все время.
Примеры:
a[i]
вместо *(a+i)
'(1 2 3)
вместо (quote 1 2 3)
ИЛИ , НЕ ] и И - зарезервированные ключевые слова. Я решил эту проблему всего 2 дня назад, заключив эти 3 слова в нижний регистр в поисковом запросе пользователя перед тем, как передать его в анализатор запросов lucene. Обратите внимание: если вы выполняете поиск и замену этих ключевых слов, убедитесь, что вы используете границы слов (\ b), чтобы в конечном итоге вы не изменили такие слова, как ANDROID и ORDER.
Затем я позволяю пользователю указать НЕ и AND , используя - и +, как это делает Google.
Вероятно, вы делаете что-то неправильно при построении запроса. Я поддержу предложение Нараяна о получении Люка (как написано в комментариях) и попробую выполнить ваши запросы с его помощью. Прошло немного времени с тех пор, как я использовал Lucene, но я не помню, чтобы у меня когда-либо возникали проблемы с ИЛИ и И.
Кроме этого, вы можете попробовать экранировать входные строки с помощью QueryParser.escape (userQuery)
Вы можете избежать «ИЛИ», когда это поисковый запрос, или написать свой собственный синтаксический анализатор запроса для другого синтаксиса. Lucene предлагает расширенный API запросов в дополнение к синтаксическому анализатору, с помощью которого вы легко поддерживаете собственный синтаксис запроса.
Я много раз читал ваш вопрос! = [
ознакомьтесь с этими предложениями
Как хранится ваш индекс?
Документ, содержащий сохраненные поля, может быть сохранен как
1) Сохраненный 2) Токенизированный 3) Индексированный 4) Вектор
используйте Люк , он может сказать вам, как хранятся ваши индексы (на самом деле)
Люк должен иметь, если вы работаете с lucene, поскольку он дает вам реальное представление о том, как хранятся индексы, он также предлагает поиск, попробуйте, дайте нам знать с вашим обновлением!
Я полагаю, вы пробовали заключить «ИЛИ» в двойные кавычки?
Если это не сработает, я думаю, вам, возможно, придется зайти так далеко, чтобы изменить исходный код Lucene, а затем перекомпилировать все это, поскольку оператор «ИЛИ» скрыт глубоко внутри кода. На самом деле, компиляции, вероятно, даже недостаточно: вам придется изменить файл QueryParser. jj в исходном пакете, который служит входными данными для JavaCC, затем запустите JavaCC, а затем перекомпилируйте все это.
Однако хорошая новость заключается в том, что нужно изменить только одну строку:
|
становится
|
Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.
Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )
в том, что нужно изменить только одну строку: |
становится
|
Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.
Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )
в том, что нужно изменить только одну строку: |
становится
|
Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это прямо сейчас.
Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )
xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )
xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )