не запрос в люцене - PullRequest
       4

не запрос в люцене

12 голосов
/ 31 августа 2010

Мне нужно не запрашивать мой индекс Lucene. Lucene в настоящее время позволяет не только когда у нас есть два или более терминов в запросе:

Так что я могу сделать что-то вроде:

country:canada not sweden

но я не могу выполнить запрос вроде:

country:not sweden

Не могли бы вы сообщить мне, если есть эффективное решение для этой проблемы

Спасибо

Ответы [ 5 ]

28 голосов
/ 24 августа 2012

Очень поздний ответ, но позже он может пригодиться кому-то еще:

*:* AND NOT country:sweden

ЕСЛИ я не ошибаюсь, это должно сделать логическое «И» со всеми документами и документами со странойэто отличается от "Швеции".

5 голосов
/ 31 августа 2010

Пожалуйста, проверьте ответ на похожий вопрос . Решением является использование MatchAllDocsQuery .

1 голос
/ 15 мая 2019

Попробуйте выполнить следующий запрос в поле поиска:

NOT message:"warning"

сообщение является полем поиска

1 голос
/ 21 августа 2016

ОК, я вижу, что вы пытаетесь сделать.

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

&query= *&qf=-country:Canada
1 голос
/ 31 августа 2010

Короткий ответ: это невозможно при использовании стандартного Lucene.

Lucene не допускает NOT запросов как один термин по той же причине, по которой он не разрешает запросы с префиксами - для выполнения любого из них движок должен был бы просмотреть каждый документ, чтобы выяснить, является ли документ хитом , Он должен просматривать каждый документ, поскольку не может использовать поисковый термин в качестве ключа для поиска документов в инвертированном индексе (используется для хранения проиндексированных документов).

Для примера:

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

Если вам действительно нужны эти функции, вы можете сохранить свой собственный список элементов при индексации, чтобы поиск not sweden превратился в поиск sweden с использованием Lucene с последующей инверсией результатов с использованием вашего набора элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...