DocumentDB Vector Search with Filtering

0

Hi all, is it possible to do DocumentDB Vector Search with Filtering?

query = { "$search": { "vectorSearch": { "vector": [0.2, 0.6, 0.9], "path": 'vectorEmbedding', "similarity": 'euclidean', "k": 2, "efSearch": 40, 'filter': { '$and': [ { 'price': { '$gt': 20 }, 'price': { '$lt': 50 } } ] }, } } }

results = test_collection.aggregate([query])

for result in results: print(result)

It resulted in this error: OperationFailure: BSON field '$search.vectorSearch.filter' is an unknown field., full error: {'ok': 0.0, 'code': 40415, 'errmsg': "BSON field '$search.vectorSearch.filter' is an unknown field.", 'operationTime': Timestamp(1714105218, 1)}

wyseow
preguntada hace un mes70 visualizaciones
1 Respuesta
0

I am facing the same problem, and I found a workaround. Just prepend a "$match" statement to your query. This way:

mycoll.insert_many([
    {"color": "blue", "vectorField": [0.82421875, -0.6953125]},
    {"color": "red", "vectorField": [0.82421875, -0.6953125]},
    {"color": "red", "vectorField": [0.05883789, -0.02038574]},
    {"color": "red", "vectorField": [0.2, 0.6]},
    {"color": "green", "vectorField": [-0.020385742, 0.32421875]}])

query = { "$search": { "vectorSearch": { "vector": [0.82421875, -0.6953125], "path": 'vectorField', "similarity": 'euclidean', "k": 2}}}
query_filter = {
    "$match": {
        "color":{ "$eq": "red"} 
    }
}

c = mycoll.aggregate([query_filter,query])
print(list(c))

I played a bit with this and it seems to work. I'll let mongo experts maybe comment if there is a better way.

AWS
respondido hace 2 horas

No has iniciado sesión. Iniciar sesión para publicar una respuesta.

Una buena respuesta responde claramente a la pregunta, proporciona comentarios constructivos y fomenta el crecimiento profesional en la persona que hace la pregunta.

Pautas para responder preguntas