#1892·graphiti

[BUG] FalkorDB: SearchFilters(node_labels=[...]) with 2+ labels raises a Cypher syntax error

Author: kentonium3Created Sep 17, 2026Updated Sep 17, 2026

Version: graphiti-core 0.30.2, falkordb 1.7.1 client, FalkorDB server 4.20.1

Summary

SearchFilters(node_labels=[...]) works with one label but fails on FalkorDB with two or more.

Reproduce

python
cfg = SearchConfig(node_config=NodeSearchConfig(search_methods=[NodeSearchMethod.cosine_similarity],
                                                reranker=NodeReranker.rrf), limit=50)
await g.search_("capacity deadline", config=cfg, group_ids=["g1"],
                search_filter=SearchFilters(node_labels=["Capacity"]))                # ok
await g.search_("capacity deadline", config=cfg, group_ids=["g1"],
                search_filter=SearchFilters(node_labels=["Capacity", "Commitment"]))  # error

Actual

redis.exceptions.ResponseError: errMsg: Invalid input '|': expected a label, '.', AND, OR, XOR, NOT, '=~', ...

Cause

search/search_filters.py builds the label filter for every non-Kuzu provider as '|'.join(filters.node_labels), giving a n:A|B label expression. This happens in node_search_filter_query_constructor, and the same join appears in edge_search_filter_query_constructor, which I did not test. FalkorDB's Cypher parser rejects that expression; it is Neo4j-style label-expression syntax, though I did not verify the Neo4j side. A FalkorDB branch (e.g. any(l IN labels(n) WHERE l IN $labels)), like the existing Kuzu branch, would avoid it.

Workaround

One search_ call per label, with results merged.