Filtering on nested properties?

Description

I’m trying to filter on nested properties of my data, but getting this error:

grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNKNOWN
details = “explorer: get class: vector search: object vector search at index idx_23a2d2a3005d23f9bbe689206ca32fb5: shard idx_23a2d2a3005d23f9bbe689206ca32fb5_A3OTVDfioAKG: build inverted filter allow list: nested query: nested clause at pos 7: data type “object” not supported in query”
debug_error_string = “UNKNOWN:Error received from peer {created_time:“2024-09-25T13:48:00.981306+02:00”, grpc_status:2, grpc_message:“explorer: get class: vector search: object vector search at index idx_23a2d2a3005d23f9bbe689206ca32fb5: shard idx_23a2d2a3005d23f9bbe689206ca32fb5_A3OTVDfioAKG: build inverted filter allow list: nested query: nested clause at pos 7: data type "object" not supported in query”}”> >

I’m not sure if I’m incorrectly refering to the property in the filters, which I’m doing through Filter.by_property(<property_name.nested_property_name>).

Example of the filters:

retriever_filters = {'filters': [_FilterValue(value='Computer Tower', operator=<_Operator.LIKE: 'Like'>, target='details.Form_Factor'), _FilterValue(value='NVIDIA', operator=<_Operator.LIKE: 'Like'>, target='details.Graphics_Card_Description'), _FilterValue(value='AMD', operator=<_Operator.LIKE: 'Like'>, target='details.Graphics_Card_Description'), _FilterValue(value=['16 GB', '32 GB', '64 GB'], operator=<_Operator.CONTAINS_ANY: 'ContainsAny'>, target='details.RAM'), _FilterValue(value=['Intel Core i7', 'Intel Core i5', 'Ryzen 5'], operator=<_Operator.CONTAINS_ANY: 'ContainsAny'>, target='details.CPU_Model'), _FilterValue(value='gaming', operator=<_Operator.LIKE: 'Like'>, target='details.Brand')]}

Server Setup Information

  • Weaviate Server Version: 1.26.3 ( Docker image )
  • Deployment Method: Docker
  • Multi Node? Number of Running Nodes:
    I’m not sure I’m deploying it through:
docker run -p 8080:8080 -p 50051:50051 --env-file .env.local -e QUERY_DEFAULTS_LIMIT=20 -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true -e PERSISTENCE_DATA_PATH=/data -v weaviate_data:/data semitechnologies/weaviate:1.26.3

where .env.local:

ENVIRONMENT=local
HOST=0.0.0.0
PORT=80
ACCESSIBLE_HOST=localhost
ACCESSIBLE_PORT=8000
GOOGLE_APPLICATION_CREDENTIALS=/code/app/auth.json
WEAVIATE_SERVER_URL=http://weaviate:8080
WEAVIATE_SERVER_GRPC_PORT=50051
OPENAI_API_KEY=<key>
  • Client Language and Version:
    langchain-weaviate==0.0.2
    weaviate-client==4.6.4
    python 3.11.9
  • Multitenancy?:
    Not that I know of, using default configs

Additional information

The vector store is created through the LangChain FastAPI backend using langchain-weaviate:

WeaviateVectorStore.from_documents(
    documents,
    client=WeaviateClient(connection_params=ConnectionParams.from_url("http://localhost:8080", 50051)),
    embedding=OpenAIEmbeddings(api_key=os.environ["OPENAI_API_KEY"]),
    index_name=index_name
)

loaded through:

WeaviateVectorStore(
    client=WeaviateClient(connection_params=ConnectionParams.from_url("http://localhost:8080", 50051)),
    embedding=OpenAIEmbeddings(api_key=os.environ["OPENAI_API_KEY"]),
    index_name=index_name,
    text_key="text"
)

and queried through:

WeaviateVectorStore.as_retriever(search_type="similarity",search_kwargs={"k": 50, "filters": retriever_filters})

Hi, this is not supported at the moment

I noticed that it is high on the backlog and was wondering if it is expected to be integrated in the foreseeable future.

AFAIK it is not scheduled yet - will probably come at some point, but I sadly cannot give anything more concrete than that

Thank you for your reply!