Как правильно экранировать OR и AND в запросе lucene?

Когда я передал в запросе "состояние: ИЛИ", Люцен выдал ошибку, потому что рассматривает "ИЛИ" в качестве ключевого слова для логического предложения, но здесь я на самом деле сокращение от штата Орегон, штат.

Я видел, что цитирование ИЛИ, поэтому запрос становится "состояние:" ИЛИ "" заставляет его работать.

но это не очень хороший подход, так как мне придется делать подстановку строк для КАЖДОГО из ключевых слов, которые использует Lucene: И ИЛИ НЕТ и другие?? Я не сколько

Я попытался непосредственно построить запрос вместо того, чтобы делать queryParser.parse(), но кажется, что это не проходит через анализаторы, что является большой проблемой.

2 ответа

Есть несколько способов избежать этого, уборщик должен избежать И, ИЛИ, И НЕ с ведущими обратными слешами, например:

\\AND \\OR \\NOT

альтернативно, синтаксический анализатор кода не будет анализировать их строчные эквиваленты как операторы

В синтаксисе запроса Lucene есть только 3 отдельных ключевых слова - AND, OR и NOT. ("TO" также используется, но распознается только внутри запроса диапазона.)

Это может помочь тому, что вашему кавычному коду нужно только распознавать ключевые слова Lucene, фактически используемые в качестве терминов в вашем приложении (например, "ИЛИ" выше в вашем примере).

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

Ответ, который должен быть правильным, - это комментарий icyitscold.

Нам нужно использовать зарезервированные слова (OR, AND, NOT) в нижнем регистре (и, или, to), это не дает никаких ошибок и правильно выполняет поиск.

Другие вопросы по тегам