二进制 Euclidean 查询结果不是按报告得分排序的,当二进制=假分
def call(method, path, **kwargs): response = requests.request( method, BASE + path, timeout=30, **kwargs, ) response.raise_for_status() return response.json()
def search(params): points = call( "POST", f"/collections/{COLLECTION}/points/query", json={ "query": QUERY, "limit": 5, "params": params, }, )["result"]["points"]
return [
(int(point["id"]), float(point["score"]))
for point in points
]def is_monotonic(rows): scores = [score for _, score in rows] return all( left <= right + 2e-5 for left, right in zip(scores, scores[1:]) )
try: call( "PUT", f"/collections/{COLLECTION}", json={ "vectors": { "size": 2, "distance": "Euclid", "hnsw_config": { "m": 4, "ef_construct": 64, }, }, "quantization_config": { "binary": { "always_ram": True, }, }, }, )
call(
"PUT",
f"/collections/{COLLECTION}/points?wait=true",
json={
"points": [
{"id": i, "vector": vector}
for i, vector in enumerate(SEED)
]
},
)
call(
"PUT",
f"/collections/{COLLECTION}/points/vectors?wait=true",
json={
"points": [
{"id": 1, "vector": UPDATED_POINT_1}
]
},
)
time.sleep(1)内容来源: qdrant/qdrant