[Qdrant] group query
qdrant๋ grouping์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ ์ ๊ณตํ๋ค.
์ผ๋ฐ ์กฐํ, scroll์์๋ ์๋๊ณ , ์ ์ฉ ์ ์ฌ๋ ๊ฒ์ API๋ฅผ ํตํด์๋ง ์ฌ์ฉํ ์ ์๋ค.
๋ณต์กํ ํต๊ณ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋๊ฑด ์๋๊ณ , ๋จ์ ๋ฐฐ์ด ๊ทธ๋ฃจํ ์ ๋๋ง ๊ธฐ๋ฅํ๋ค.
๋ฐ์ดํฐ ์ธํ
์ ๋นํ ๊น์๋ค.
PUT /collections/products
{
"vectors": {
"size": 4,
"distance": "Dot"
}
}
PUT /collections/products/points
{
"points": [
{
"id": 1,
"payload": {
"color": "blue",
"price": 10000
},
"vector": [1,1,1,1]
},
{
"id": 2,
"payload": {
"color": "red",
"price": 5000
},
"vector": [1,2,1,1]
},
{
"id": 3,
"payload": {
"color": "blue",
"price": 20000
},
"vector": [1,1,2,2]
},
{
"id": 4,
"payload": {
"color": "yellow",
"price": 4000
},
"vector": [1,2,3,1]
},
{
"id": 5,
"payload": {
"color": "blue",
"price": 4500
},
"vector": [1,1,1,1]
},
{
"id": 6,
"payload": {
"color": "black",
"price": 15000
},
"vector": [1,1,1,1]
},
{
"id": 7,
"payload": {
"color": "white",
"price": 2000
},
"vector": [1,1,1,1]
},
]
}
๊ทธ๋ฌ๋ฉด ์ด๋ฐ ์์ผ๋ก ๊ทธ๋ฃน ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ณผ ์ ์๋ค.
์ผ๋ฐ query API์ ์์ฒญ ํ์์ ๊ฑฐ์ ๊ฐ๋ค. ๊ทธ๋ฃน ๊ธฐ์ค์ ์ง์ ํ๋ ํ๋์ธ group_by๊ฐ ์ถ๊ฐ๋ ๋ถ์ด๋ค.
POST /collections/products/points/query/groups
{
"query": [2,2,2,2],
"group_by": "color",
"with_vector": true,
"with_payload": true
}
์ด๋ฌ๋ฉด ์ด์ color ๊ธฐ์ค์ผ๋ก ๊ฐ์ ๋ฌถ๊ณ , hits๋ผ๋ ๋ด๋ถ ํ๋์ ๋ชจ์์ ๋ฟ๋ ค์ค๋ค.
์ฐธ๊ณ ๋ก, ์ฑ๋ฅ ๋ฌธ์ ๋๋ฌธ์ธ์ง ๊ทธ๋ฃจํํด์ ๋ฟ๋ ค์ฃผ๋ ๊ฐ์์๋ ์ ํ์ด ์กด์ฌํ๋ค.
group_size๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ์กฐ์ ํ ์ ์๊ณ , ๊ธฐ๋ณธ๊ฐ์ 3๊ฐ๋ค.
์ฐธ์กฐ
https://api.qdrant.tech/api-reference/search/query-points-groups