diff --git a/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py b/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py index 7201a3f665220..84e91362c18d6 100644 --- a/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py +++ b/llama-index-integrations/vector_stores/llama-index-vector-stores-qdrant/llama_index/vector_stores/qdrant/base.py @@ -1072,6 +1072,19 @@ def _build_subfilter(self, filters: MetadataFilters) -> Filter: match=MatchAny(any=values), ) ) + elif subfilter.operator == FilterOperator.NIN: + # match none of the values + # https://qdrant.tech/documentation/concepts/filtering/#match-except + if isinstance(subfilter.value, List): + values = [str(val) for val in subfilter.value] + else: + values = str(subfilter.value).split(",") + conditions.append( + FieldCondition( + key=subfilter.key, + match=MatchExcept(**{"except": values}), + ) + ) filter = Filter() if filters.condition == FilterCondition.AND: