Короткий ответ: это невозможно при использовании стандартного Lucene.
Lucene не допускает NOT
запросов как один термин по той же причине, по которой он не разрешает запросы с префиксами - для выполнения любого из них движок должен был бы просмотреть каждый документ, чтобы выяснить, является ли документ хитом , Он должен просматривать каждый документ, поскольку не может использовать поисковый термин в качестве ключа для поиска документов в инвертированном индексе (используется для хранения проиндексированных документов).
Для примера:
Для поиска not sweden
самый простой (и, возможно, наиболее эффективный) подход будет заключаться в поиске sweden
, а затем "инвертировать" набор результатов, чтобы получить все документы, которые не входят в этот набор результатов. Для этого потребуется найти все необходимые (т. Е. Не в наборе результатов) документы в индексе, но без ключа для их поиска. Это можно сделать путем перебора документов в индексе - задача, для которой он не оптимизирован, и, следовательно, будет страдать скорость.
Если вам действительно нужны эти функции, вы можете сохранить свой собственный список элементов при индексации, чтобы поиск not sweden
превратился в поиск sweden
с использованием Lucene с последующей инверсией результатов с использованием вашего набора элементов.