Сфинкс игнорирует идентификатор из результата, если совпадает - PullRequest
0 голосов
/ 17 апреля 2019

Я показываю некоторый рекомендуемый продукт пользователю, и если пользователь игнорирует какой-либо продукт из списка, этот продукт не должен отображаться в результате. Но в моем случае результат игнорирования появляется, а остаток оставшегося без внимания остального пропал

ниже мой код:

MATCH('@!objectid (%s)' % '|'.join(ids_str))

1 Ответ

1 голос
/ 18 апреля 2019

The!Селектор полей означает поиск по всем полям, КРОМЕ этого поля.то есть @! означает «игнорировать поле».(@ само по себе является единственным полем)

Таким образом, ваш запрос ищет любой из идентификаторов в любом поле , отличном от , кроме objectid.

Вероятно, хотите

MATCH('@objectid -(%s)' % '|'.join(ids_str))

Запрещать ключевые слова, а не поле!


Хотя sphinx не любит выполнять запросы, которые ТОЛЬКО состоят из отрицательных ключевых слов,так что может понадобиться что-то еще.Еще одно ключевое слово, которое соответствует ВСЕМ документам.

Вроде как

MATCH('the @objectid -(%s)' % '|'.join(ids_str))

, так как в большинстве документов может содержаться the.Но чтобы быть уверенным, что вы поймали все, может потребоваться другая синтетическая ценность, которую вы можете гарантировать в каждом документе!(если у вас нет других подходящих ключевых слов!)

...