The!Селектор полей означает поиск по всем полям, КРОМЕ этого поля.то есть @!
означает «игнорировать поле».(@
само по себе является единственным полем)
Таким образом, ваш запрос ищет любой из идентификаторов в любом поле , отличном от , кроме objectid.
Вероятно, хотите
MATCH('@objectid -(%s)' % '|'.join(ids_str))
Запрещать ключевые слова, а не поле!
Хотя sphinx не любит выполнять запросы, которые ТОЛЬКО состоят из отрицательных ключевых слов,так что может понадобиться что-то еще.Еще одно ключевое слово, которое соответствует ВСЕМ документам.
Вроде как
MATCH('the @objectid -(%s)' % '|'.join(ids_str))
, так как в большинстве документов может содержаться the
.Но чтобы быть уверенным, что вы поймали все, может потребоваться другая синтетическая ценность, которую вы можете гарантировать в каждом документе!(если у вас нет других подходящих ключевых слов!)