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!

@Dirk IS there an update on when this will be picked up! I finally got around to implement and was very pleased with the nested object property. Now that you can filter it, makes it useless. Why offer this kind of data type if you cannot use it…