blevesearch/bleve

A modern text/numeric/geo-spatial/vector indexing library for go

bleveとは?

bleveは、Goプログラミング言語で書かれた検索ライブラリです。開発者はデータをインデックス化(高速検索のために整理)し、そのインデックスをクエリ(検索)することで、アプリケーションに全文検索機能を簡単に追加できます。

あらゆるGoデータ構造やJSONデータをインデックス化でき、必要に応じてカスタマイズ可能な適切なデフォルト設定が用意されています。

主な機能

インデックス可能なフィールドタイプ

bleveは多くのデータフィールドを理解します:

  • text(単語/文章)
  • number(数値)
  • datetime(日付と時刻)
  • boolean(真/偽)
  • geopoint および geoshape(地図上の位置と領域)
  • IP(インターネットアドレス)
  • vector(類似検索に使用される数学的表現)

サポートされているクエリタイプ

以下の方法で検索可能です:

  • 基本マッチング: term, phrase, match, match_phrase, prefix, regexp, wildcard, fuzzy
  • 範囲指定: term range, numeric range, date range, boolean field
  • 複合クエリ: conjuncts(すべて一致)、disjuncts(いずれか一致)、およびブール論理(must / should / must_not)による条件の組み合わせ
  • クエリ文字列構文: テキストベースのシンプルなクエリ記述方法
  • 地理空間検索: 特定の場所の近くや形状内のアイテムを検索
  • ベクトル検索: 近似k近傍法(ベクトルによる類似アイテムの検索)
  • 同義語検索: 同じ意味を持つ単語のマッチング
  • 階層型ネスト検索: 構造化されたネストされたデータの検索

スコアリングとランキング

bleveは、tf-idf と BM25 という2つの有名なスコアリングモデルを使用して結果をランク付けします。また、ハイブリッド検索もサポートしており、RRF (Reciprocal Rank Fusion) と RSF (Relative Score Fusion) という2つの融合手法を用いて、正確なキーワードマッチとセマンティック(意味ベース)マッチを組み合わせることができます。

その他の機能

  • 結果のページネーション: 大規模な結果セットのページング
  • クエリ時のブースト: 検索中に特定の用語やフィールドに重み付けを行う
  • マッチのハイライト: ドキュメントのどの部分が一致したかをテキストの断片とともに表示
  • 集計/ファセット: 用語、数値範囲、日付範囲ごとに結果をグループ化(フィルタやサマリーに便利)

仕組み(コード例)

インデックス化 — ドキュメントの保存:

message := struct {
    Id   string
    From string
    Body string
}{
    Id:   "example",
    From: "xyz@couchbase.com",
    Body: "bleve indexing is easy",
}

mapping := bleve.NewIndexMapping()
index, err := bleve.New("example.bleve", mapping)
if err != nil {
    panic(err)
}
index.Index(message.Id, message)

クエリ — インデックスの検索:

index, _ := bleve.Open("example.bleve")
query := bleve.NewQueryStringQuery("bleve")
searchRequest := bleve.NewSearchRequest(query)
searchResult, _ := index.Search(searchRequest)

コマンドラインツール

bleveには、go install github.com/blevesearch/bleve/v2/cmd/bleve@latest でインストールできる CLI(コマンドラインインターフェース)が付属しています。ターミナルからbleveインデックスを操作できます。主なコマンド:

  • create — 新しいインデックスの作成
  • index — インデックスへのファイル追加
  • query — インデックスの検索
  • count — ドキュメント数のカウント
  • dump — インデックス内容の表示
  • check — インデックスの整合性検証
  • fields — フィールドの一覧表示
  • mapping — 使用されているマッピングの表示
  • dictionary — フィールドの用語辞書の出力
  • bulk — 複数のJSONドキュメントの一括読み込み
  • registry — コンパイル済みコンポーネントの一覧表示
  • scorch — scorchインデックス(基盤となるストレージエンジン)との対話

テキスト分析

bleveには、カスタマイズ可能な汎用アナライザーに加え、多くの言語向けの事前構築済みテキストアナライザーが含まれています:アラビア語、ブルガリア語、カタルーニャ語、中日韓語、クルド語、デンマーク語、ドイツ語、ギリシャ語、英語、スペイン語(カスティーリャ語およびガリシア語)、バスク語、ペルシャ語、フィンランド語、フランス語、ゲール語、ヒンディー語、クロアチア語、ハンガリー語、アルメニア語、インドネシア語、イタリア語、オランダ語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、スウェーデン語、トルコ語。

また、アナライザーの実験に役立つ テキスト分析ウィザード bleveanalysis.couchbase.com も用意されています。

ヘルプとライセンス

要するに、bleveはGo開発者向けの柔軟で機能豊富な検索ライブラリであり、迅速なタスクのためのCLIと、テキスト分析のための幅広い言語サポートを備えています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト