Мне известно, что в документации Lucene написано
Примечание. Оператор NOT нельзя использовать только с одним термином. Например,
следующий поиск не даст результатов:
НЕ "Джакарта апач"
Однако я хотел бы иметь возможность сформировать запрос, который возвращает все документы, НЕ содержащие термин. Я рассмотрел связывание MatchAllDocsQuery и TermQuery в BooleanQuery , но, похоже, не могу найти правильную комбинацию.
Если я проиндексировал следующие два документа
Doc0: content:The quick brown fox jumps over the lazy dog.
Doc1: (empty string)
Запрос *:* -content:fox
возвращает оба документа, когда я просто хочу один документ.
RegexQuery content:^((?!fox).)*$
, предложенный этим ответом StackOverflow возвращает один документ, но, похоже, он работает неправильно, поскольку content:^((?!foo).)*$
возвращает также один документ, когда я ожидаю, что он возвратит два документа.
Я знаю о влиянии на производительность того, что я хочу сделать. Запрос будет выполняться только для нескольких документов, поэтому я не слишком беспокоюсь о производительности.
Есть ли способ написать запрос Lucene, чтобы получить то, что я хочу?