endpoint/search?q=shelim&fq=(or (not type:'XYZ') (not mod:'ABC'))&return=_all_fields
Мой результат возвращает данные для типа XYZ
в то время как я упомянул, чтобы не возвращать значение для XYZ
в запросе. Что-то не так? Также скажи мне, почему q
а также fq
для?
Как это объясняется в Cloudsearch Документация
Вы используете параметр fq для фильтрации документов, которые соответствуют запросу
критерии, указанные с параметром q, не влияя на
оценки релевантности документов, включенных в результаты поиска.
Указание фильтра просто контролирует, какие совпадающие документы
включены в результаты, это не влияет на то, как они оцениваются и
отсортирован.
q
параметр, где вы вводите свой фактический запрос.
Что касается ваших критериев типа данных, вы в основном делаете
where type != 'XYZ' OR type != 'ABC'
Вам нужно использовать AND
состояние ((and (not type:'XYZ') (not mod:'ABC'))
) поэтому документы, которые не имеют типа XYZ
и не имеют типа ABC
отфильтрованы.
По вашему запросу документы, которые имеют тип ABC
отфильтрованы но некоторые из этих документов имеют тип XYZ
. Они включены, так как вы используете OR
состояние.
Других решений пока нет …