mirror of
https://github.com/qdrant/qdrant.git
synced 2026-08-06 01:50:57 -05:00
* skip serializing null fields in Record and ScoredPoint * update tests * fix consensus tests
164 lines
5.8 KiB
Python
164 lines
5.8 KiB
Python
import requests
|
|
|
|
from .assertions import assert_http_ok
|
|
from .fixtures import create_collection
|
|
from .utils import every_test, start_cluster
|
|
|
|
COLL_NAME = "test_collection"
|
|
|
|
|
|
def test_order_by_from_remote_shard(tmp_path, every_test):
|
|
peer_api_uris, peer_dirs, bootstrap_uri = start_cluster(tmp_path, num_peers=2, port_seed=10000)
|
|
|
|
uri = peer_api_uris[0]
|
|
|
|
create_collection(uri, collection=COLL_NAME, shard_number=2, replication_factor=1)
|
|
|
|
requests.put(
|
|
f"{uri}/collections/{COLL_NAME}/index",
|
|
json={"field_name": "index", "field_schema": "integer"},
|
|
).raise_for_status()
|
|
|
|
res = requests.put(
|
|
f"{uri}/collections/{COLL_NAME}/points",
|
|
params={
|
|
"wait": "true",
|
|
},
|
|
json={
|
|
"points": [
|
|
{
|
|
"id": 0,
|
|
"payload": {
|
|
"index": 0,
|
|
"timestamp": "2024-04-12T08:40:06.189301",
|
|
"text": "Italy: tomatoes, olive oil, pasta.",
|
|
"title": "food",
|
|
},
|
|
"vector": {},
|
|
}
|
|
]
|
|
},
|
|
)
|
|
assert_http_ok(res)
|
|
|
|
requests.put(
|
|
f"{uri}/collections/{COLL_NAME}/points",
|
|
params={
|
|
"wait": "true",
|
|
},
|
|
json={
|
|
"batch": {
|
|
"ids": [11, 12, 13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
|
|
"payloads": [
|
|
{
|
|
"timestamp": "2024-04-12T08:40:20.015587",
|
|
"text": "Japan: Polite, punctual, public transport reliance",
|
|
"index": 11,
|
|
"title": "travel",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:20.290047",
|
|
"text": "Italy: Relaxed, historical tours, slow-paced",
|
|
"index": 12,
|
|
"title": "travel",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:20.562687",
|
|
"text": "USA: Road trips, diverse landscapes.",
|
|
"index": 13,
|
|
"title": "travel",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:09.482208",
|
|
"text": "Japan: seafood-centric with artistic presentation.",
|
|
"index": 1,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:09.744967",
|
|
"text": "Mexico: beans, chili peppers, and meat.",
|
|
"index": 2,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:10.020073",
|
|
"text": "India: diverse vegetarian and meat dishes.",
|
|
"index": 3,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:10.285342",
|
|
"text": "France: Gourmet dining, focuses on cheese, wine",
|
|
"index": 4,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:10.883714",
|
|
"text": "China: diverse cuisines, emphasizes balance, uses rice",
|
|
"index": 5,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:13.166867",
|
|
"text": "Thailand: five flavors, spicy, sweet, salty, sour.",
|
|
"index": 6,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:15.436143",
|
|
"text": "USA: Melting pot, diverse, large portions, fast food.",
|
|
"index": 7,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:15.697163",
|
|
"text": "Brazil: barbecue heavy",
|
|
"index": 8,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:15.963504",
|
|
"text": "Greece: Olive oil, feta, yogurt, seafood",
|
|
"index": 9,
|
|
"title": "food",
|
|
},
|
|
{
|
|
"timestamp": "2024-04-12T08:40:16.738832",
|
|
"text": "Ethiopia: bread with spicy stews and vegetables",
|
|
"index": 10,
|
|
"title": "food",
|
|
},
|
|
],
|
|
"vectors": {},
|
|
}
|
|
},
|
|
).raise_for_status()
|
|
|
|
res = requests.post(
|
|
f"{uri}/collections/{COLL_NAME}/points/scroll", json={"limit": 10, "order_by": "index"}
|
|
)
|
|
|
|
assert_http_ok(res)
|
|
|
|
for point in res.json()["result"]["points"]:
|
|
assert point.get("payload") is not None
|
|
|
|
values = [point["payload"]["index"] for point in res.json()["result"]["points"]]
|
|
|
|
assert values == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
|
|
# It should also work when with_payload is False
|
|
res = requests.post(
|
|
f"{uri}/collections/{COLL_NAME}/points/scroll",
|
|
json={"limit": 10, "order_by": "index", "with_payload": False},
|
|
)
|
|
|
|
assert_http_ok(res)
|
|
|
|
ids = [point["id"] for point in res.json()["result"]["points"]]
|
|
|
|
assert ids == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
|
|
|
for point in res.json()["result"]["points"]:
|
|
assert point.get("payload") is None
|