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
已提問 1 個月前檢視次數 70 次
1 個回答
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
已回答 42 分鐘前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南