Is it possible to do filtering on dynamic fields in Atlas Vector Search? If not, are there any alternatives to do this?
I have a document collection with a schema like this:
{
...
"metadata": {
"foo": "bar",
...
},
"embedding": [...] # embedding vector
},
Is it possible to create a vector search index like this?
vector_search_index_definition = {
"fields": [
{
"type": "vector",
"path": "embedding",
"similarity": "cosine",
"numDimensions": 1536
},
{
"type": "filter",
"path": "metadata.*"
}
]
}
So I can later query with a filter on a field within ‘metadata’?
embedding = embed.embed_query("example")
pipeline = [
{
'$vectorSearch': {
'index': 'products_vector_search_index',
'path': "embedding",
'queryVector': embedding,
'numCandidates': 25,
'limit': 10,
'filter': {
"metadata.foo": "bar"
},
}
}
]
db.collection.aggregate(pipeline).to_list()