2011-06-01 3 views
0

Я пытался запустить следующий логический запрос в lucene, но он, похоже, терпит неудачу. Пожалуйста помоги.Boolean Поиск в Lucene

(а или б) и -> отлично работает

(а и б) или -> дает результат для А и В или с. Таким образом, a становится обязательным, а b и c становится обязательным, а результат поиска неверен. Там, где он должен работать как a, b должен быть доступен или c может быть доступен.

Другой пример:

Если вы ищете «(а, б)» вернет х результаты

Если вы ищете «с» вернет у результатов

Если вы ищете для "(a и b) или c" число результатов не может быть меньше, чем большее из x или y. Но этого не происходит. Пожалуйста, помогите, как я должен продолжить реализацию этого?

+0

ли b и c являются фактическими значениями, которые вы ищете? – PVR

ответ

0

(a AND b) или c преобразуется в (+a +b) c. То, что вы хотите, это без круглых скобок: +a +b c.

С логической точки зрения, «A и B должны произойти, C может произойти», эквивалентно «A и B должны произойти». (В классической логике нельзя сказать «может быть правдой».) Таким образом, вам будет сложно сказать (+a +b) c в логических терминах. Один из способов сделать это - «(a И b И c) или (a AND b)».

+0

Спасибо за ваш отзыв Xodarap. Тем не менее, я понимаю, что все документы, которые есть у любого <"a AND b"> или <"c">, все они должны появиться в этом логическом результате поиска, чего не происходит. Итак, с логической точки зрения, если A и B происходят или возникают только C, в документе все документы должны быть возвращены в результирующем наборе. – ranjit

+0

@ranjit: Вы пробовали делать это как '(+ a + b) c'? Это будет, по крайней мере, сужаться там, где проблема. Я думаю, что в некоторых синтаксических анализах OR должен быть капитализирован, чего нет в вашем примере - так может быть и это. – Xodarap

Смежные вопросы