Ключевое слово (ИЛИ, И) ищет в Lucene

Ерунда. C и программисты Lisp используют синтаксический сахар все время.

Примеры:

  • a[i] вместо *(a+i)
  • '(1 2 3) вместо (quote 1 2 3)
18
задан Areca 24 March 2016 в 15:49
поделиться

5 ответов

ИЛИ , НЕ ] и И - зарезервированные ключевые слова. Я решил эту проблему всего 2 дня назад, заключив эти 3 слова в нижний регистр в поисковом запросе пользователя перед тем, как передать его в анализатор запросов lucene. Обратите внимание: если вы выполняете поиск и замену этих ключевых слов, убедитесь, что вы используете границы слов (\ b), чтобы в конечном итоге вы не изменили такие слова, как ANDROID и ORDER.

Затем я позволяю пользователю указать НЕ и AND , используя - и +, как это делает Google.

3
ответ дан 30 November 2019 в 09:32
поделиться

Вероятно, вы делаете что-то неправильно при построении запроса. Я поддержу предложение Нараяна о получении Люка (как написано в комментариях) и попробую выполнить ваши запросы с его помощью. Прошло немного времени с тех пор, как я использовал Lucene, но я не помню, чтобы у меня когда-либо возникали проблемы с ИЛИ и И.

Кроме этого, вы можете попробовать экранировать входные строки с помощью QueryParser.escape (userQuery)

Подробнее О побеге

0
ответ дан 30 November 2019 в 09:32
поделиться

Вы можете избежать «ИЛИ», когда это поисковый запрос, или написать свой собственный синтаксический анализатор запроса для другого синтаксиса. Lucene предлагает расширенный API запросов в дополнение к синтаксическому анализатору, с помощью которого вы легко поддерживаете собственный синтаксис запроса.

-1
ответ дан 30 November 2019 в 09:32
поделиться

Я много раз читал ваш вопрос! = [

ознакомьтесь с этими предложениями

Как хранится ваш индекс?

Документ, содержащий сохраненные поля, может быть сохранен как

1) Сохраненный 2) Токенизированный 3) Индексированный 4) Вектор

он может существенно

используйте Люк , он может сказать вам, как хранятся ваши индексы (на самом деле)

Люк должен иметь, если вы работаете с lucene, поскольку он дает вам реальное представление о том, как хранятся индексы, он также предлагает поиск, попробуйте, дайте нам знать с вашим обновлением!

1
ответ дан 30 November 2019 в 09:32
поделиться

Я полагаю, вы пробовали заключить «ИЛИ» в двойные кавычки?

Если это не сработает, я думаю, вам, возможно, придется зайти так далеко, чтобы изменить исходный код Lucene, а затем перекомпилировать все это, поскольку оператор «ИЛИ» скрыт глубоко внутри кода. На самом деле, компиляции, вероятно, даже недостаточно: вам придется изменить файл QueryParser. jj в исходном пакете, который служит входными данными для JavaCC, затем запустите JavaCC, а затем перекомпилируйте все это.

Однако хорошая новость заключается в том, что нужно изменить только одну строку:

|

становится

|

Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.

Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )

в том, что нужно изменить только одну строку:

|

становится

|

Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.

Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )

в том, что нужно изменить только одну строку:

|

становится

|

Таким образом, у вас будет только "||" как логический оператор ИЛИ. Существует файл build.xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это прямо сейчас.

Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )

xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.

Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )

xml, который также содержит вызов JavaCC, но вы должны сами загрузить этот инструмент . Боюсь, что я не могу сейчас попробовать это сам.

Это, возможно, хороший вопрос для списка рассылки разработчиков Lucene, но, пожалуйста, дайте нам знать, если вы это сделаете, и они предложат более простое решение; - )

4
ответ дан 30 November 2019 в 09:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: