2010-05-13 2 views
1

Я использую BooleanQuery для объединения нескольких запросов. Я нахожу, что если я добавлю BooleanQuery в BooleanQuery, то результат не будет возвращен. Добавленный BooleanQuery является MUST_NOT, например -city_id: 100.Вложенный BooleanQuery?

Но, как говорит спецификация lucene, BooleanQuery может быть вложенным, что, я думаю, означает, что можно добавить такой BooleanQuery. Теперь мне нужно получить все предложения из добавляемого BooleanQuery, а затем добавить их в контейнер BooleanQuery один за другим.

Я немного смущен. Кто-нибудь может помочь? Большое спасибо!

ответ

4

Lucene не поддерживает унарный оператор NOT. Но вы можете получить результаты для такого запроса, указав его с помощью MatchAllDocsQuery.

+0

Ах, похоже, работа. Благодарю. Но разве это не смущает? Я добавляю BooleanQuery в BooleanQuery, и все же мне нужно проверить, должен ли добавляться запрос и какой-то запрос. Кроме того, делает ли ANDing MatchAllDocsQuery в этом случае подрыв производительности? – KailZhang

+0

Вы можете прочитать о логических запросах в этой теме. http://search-lucene.com/m/8x64lENo571/ По существу, NOT просто подавляет документы. Для этого вам нужен еще один положительный набор. Я не знаю деталей реализации MatchAllDocsQuery, но gettig все документы должны быть достаточно быстрыми. Дополнительная операция ANDing должна быть быстрой, а также внутренне выполнять операции на битете. –

+0

Извинения за нарушенные предложения в предыдущем комментарии. –

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