GitHub概要

weaviate/weaviate

Weaviate is an open-source vector database that stores both objects and vectors, allowing for the combination of vector search with structured filtering with the fault tolerance and scalability of a cloud-native database​.

スター14,045
ウォッチ135
フォーク1,014
作成日:2016年3月30日
言語:Go
ライセンス:BSD 3-Clause "New" or "Revised" License

トピックス

approximate-nearest-neighbor-searchgenerative-searchgrpchnswhybrid-searchimage-searchinformation-retrievalmlopsnearest-neighbor-searchneural-searchrecommender-systemsearch-enginesemantic-searchsemantic-search-enginesimilarity-searchvector-databasevector-searchvector-search-enginevectorsweaviate

スター履歴

weaviate/weaviate Star History
データ取得日時: 2025/7/30 00:10

概要

Weaviateは、オープンソースのベクトルデータベースで、機械学習モデルとベクトル表現を活用して効率的なデータ保存、検索、取得を実現します。セマンティック検索、推薦、分類機能を提供し、GraphQL APIを通じた直感的なデータ操作が可能です。

詳細

GraphQL対応

Weaviateの最大の特徴の一つは、完全なGraphQL APIサポートです:

  • 3つの主要機能

    • Get:クラス名が分かっている場合のデータ検索
    • Explore:スキーマやクラス名が不明な場合のファジー検索
    • Aggregate:メタデータ検索とデータ集約
  • モジュール拡張:GraphQLフィルターやカスタムプロパティ(_additional)の追加が可能

知識グラフ機能

Weaviateはベクトルデータベースでありながら、知識グラフの機能も備えています:

  • クラスプロパティ構造:各データオブジェクトにベクトルが付与され、GraphQLで複雑なフィルタリングが可能
  • リレーション管理:オブジェクト間の関係を表現し、GraphQLでリファレンス解決をサポート
  • セマンティック解釈:スキーマ(オントロジー)を意味的に解釈し、形式的なエンティティではなく概念での検索が可能

ハイブリッド検索

ベクトル検索と従来の転置インデックスを組み合わせた強力な検索機能:

  • ベクトル検索と同時にスカラー値(テキスト、数値など)でのフィルタリング
  • 単一のクエリで両方の検索方式を活用
  • BM25キーワード検索とベクトル検索の併用

Docker対応

Weaviateは本番環境からローカル開発まで幅広くDockerをサポート:

services:
  weaviate:
    image: cr.weaviate.io/semitechnologies/weaviate:latest
    ports:
      - 8080:8080
      - 50051:50051
    environment:
      ENABLE_MODULES: 'text2vec-transformers,generative-openai'

メリット

  • 高速性:数百万オブジェクトに対するミリ秒単位の10-NN検索
  • 柔軟性:インポート時の自動ベクトル化、または事前ベクトル化データのアップロードに対応
  • プロダクション対応:スケーリング、レプリケーション、セキュリティを考慮した設計
  • マルチモーダル:テキスト、画像、音声など様々なデータタイプに対応
  • 分散アーキテクチャ:シャーディング、レプリケーション、RAFTコンセンサスによる高可用性

デメリット

  • 学習曲線:GraphQLとベクトル検索の概念理解が必要
  • リソース消費:大規模データセットでは相応のメモリとストレージが必要
  • モジュール依存:高度な機能には外部AIサービスとの連携が必要な場合がある

主要リンク

書き方の例

基本的なGraphQLクエリ

{
  Get {
    Article(
      nearText: {
        concepts: ["AI技術"]
        distance: 0.6
      }
      limit: 5
    ) {
      title
      content
      _additional {
        distance
        certainty
      }
    }
  }
}

Pythonクライアントでの使用例

import weaviate

# Weaviateクライアントの初期化
client = weaviate.Client("http://localhost:8080")

# nearTextでの検索
result = client.query.get(
    "Article",
    ["title", "content"]
).with_near_text({
    "concepts": ["機械学習", "深層学習"],
    "distance": 0.7
}).with_limit(10).do()

print(result)

ハイブリッド検索の例

# ベクトル検索とフィルタリングの組み合わせ
where_filter = {
    "path": ["category"],
    "operator": "Equal",
    "valueText": "technology"
}

result = client.query.get(
    "Article",
    ["title", "content", "category"]
).with_near_text({
    "concepts": ["AI革新"]
}).with_where(where_filter).with_limit(5).do()

Docker Composeでの起動

version: '3.8'
services:
  weaviate:
    image: cr.weaviate.io/semitechnologies/weaviate:latest
    restart: on-failure:0
    ports:
      - "8080:8080"
      - "50051:50051"
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'text2vec-transformers'
      ENABLE_MODULES: 'text2vec-transformers,generative-openai'
      CLUSTER_HOSTNAME: 'node1'
    volumes:
      - weaviate_data:/var/lib/weaviate

volumes:
  weaviate_data: