🐕
【🚀Qdrant入門】QdrantにおけるFilteringの仕組みと使い方
Qdrantはベクトルデータベースとして、類似度検索だけでなく、複雑な条件でのフィルタリング機能も提供しています。この記事ではQdrantのFilteringについて体系的に解説し、実際の使用方法を具体例とともに紹介します。
🔎 1. QdrantのFilteringとは?
QdrantのFilteringは、ベクトル類似度検索を実行する際に、特定の条件に一致するデータのみを対象にする機能です。データの属性(ペイロード)に基づいて絞り込むことが可能です。
📐 2. フィルターの基本構造
QdrantのFilterオブジェクトは以下の3つの主要コンポーネントで構成されます。
must: すべての条件を満たす必要があります(AND条件)
should: 少なくとも1つ以上の条件を満たす必要があります(OR条件)
must_not: 条件を満たさないデータを対象にします(NOT条件)
- 各条件を組み合わせて柔軟なフィルターを作成できます。
📌 3. フィルター条件の例
{
"filter": {
"must": [
{ "key": "price", "range": { "gte": 100, "lte": 500 } },
{ "key": "category", "match": { "value": "clothing" } }
],
"should": [
{ "key": "brand", "match": { "value": "nike" } },
{ "key": "brand", "match": { "value": "adidas" } }
],
"must_not": [
{ "key": "out_of_stock", "match": { "value": true } }
]
}
- 上記例では、価格が100〜500で、カテゴリーがclothingであり、NikeかAdidasブランドの商品を検索します。
- ただし、在庫切れの商品は除外しています。
🛠 4. 各種条件タイプ
- Qdrantでは多様なフィルタリング条件をサポートしています。
条件タイプ | 説明 |
---|---|
match | 属性が特定の値に完全一致する |
range | 数値や日時などの範囲条件を指定 |
geo_bounding_box | 地理的範囲(矩形)でのフィルタリング |
geo_polygon | ポリゴン内に含まれるデータでフィルタリング |
ex)Range条件
{ "key": "age", "range": { "gt": 20, "lt": 30 } }
ex)Geo条件
{ "key": "location", "geo_radius": { "center": { "lat": 35.68, "lon": 139.76 }, "radius": 5000 } }
🚀 5. 高度な条件組み合わせ
- 複雑な条件を組み合わせることも可能です。
{
"filter": {
"must": [
{ "key": "status", "match": { "value": "active" } },
{ "key": "views", "range": { "gte": 1000 } }
],
"should": [
{ "key": "tags", "match": { "value": "sale" } },
{ "key": "tags", "match": { "value": "new" } }
]
}
}
- このフィルターは、「ステータスがactiveで、ビュー数が1000以上のもの」を必須条件とし、「タグがsaleまたはnewのもの」をオプショナルに指定しています。
🌟 7. 実践的なTips
- よく使用するフィルターは事前にインデックス化しておくことで、検索速度が向上します。
- ペイロードデータを適切に構造化すると、フィルター作成が簡単になります
- 大量データのフィルタリングはscroll APIを使用すると効率的に処理できます。
🚧 まとめ
QdrantのFiltering機能は、強力かつ柔軟な検索条件を実現します。基本的な使い方から高度な条件の組み合わせまで、目的に応じて適切に活用することで、より高精度で効率的なベクトル検索を実現しましょう。
Discussion