Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

gRPC API リファレンス

すべてのサービスは laurus.v1 protobuf パッケージで定義されています。

サービス一覧

サービスRPC説明
HealthServiceCheckヘルスチェック
IndexServiceCreateIndex, GetIndex, GetSchema, AddField, DeleteFieldインデックスのライフサイクルとスキーマ
DocumentServicePutDocument, AddDocument, GetDocuments, DeleteDocuments, Commitドキュメント CRUD とコミット
SearchServiceSearch, SearchStream単発検索とストリーミング検索

HealthService

Check

サーバーの現在のサービング状態を返します。

rpc Check(HealthCheckRequest) returns (HealthCheckResponse);

レスポンスフィールド:

フィールド説明
statusServingStatusサーバーの準備が完了している場合は SERVING_STATUS_SERVING

IndexService

CreateIndex

指定されたスキーマで新しいインデックスを作成します。インデックスが既に開いている場合は ALREADY_EXISTS エラーを返します。

rpc CreateIndex(CreateIndexRequest) returns (CreateIndexResponse);

リクエストフィールド:

フィールド必須説明
schemaSchemaはいインデックスのスキーマ定義

Schema 構造:

message Schema {
  map<string, FieldOption> fields = 1;
  repeated string default_fields = 2;
  map<string, AnalyzerDefinition> analyzers = 3;
  map<string, EmbedderConfig> embedders = 4;
  DynamicFieldPolicy dynamic_field_policy = 5;
}

enum DynamicFieldPolicy {
  DYNAMIC_FIELD_POLICY_UNSPECIFIED = 0;
  DYNAMIC_FIELD_POLICY_STRICT = 1;
  DYNAMIC_FIELD_POLICY_DYNAMIC = 2;
  DYNAMIC_FIELD_POLICY_IGNORE = 3;
}
  • fields — フィールド名をキーとしたフィールド定義。
  • default_fields — クエリでフィールドを指定しない場合のデフォルト検索対象フィールド名。
  • analyzers — 名前をキーとしたカスタムアナライザーパイプライン。TextOption.analyzer で参照。
  • embedders — 名前をキーとしたエンベッダー設定。ベクトルフィールドオプション(HnswOption.embedder など)で参照。
  • dynamic_field_policy — 投入されたドキュメントに含まれるが fields宣言されていないフィールドの扱い。UNSPECIFIED(値 0)は後方互換のため DYNAMIC として解釈されます。挙動マトリクスおよび DYNAMIC での情報損失警告は スキーマとフィールド を参照してください。

AnalyzerDefinition:

message AnalyzerDefinition {
  repeated ComponentConfig char_filters = 1;
  ComponentConfig tokenizer = 2;
  repeated ComponentConfig token_filters = 3;
}

ComponentConfig(文字フィルター、トークナイザー、トークンフィルターに使用):

フィールド説明
typestringコンポーネントタイプ名(例: "whitespace", "lowercase", "unicode_normalization"
paramsmap<string, string>タイプ固有のパラメータ(文字列のキーと値のペア)

EmbedderConfig:

フィールド説明
typestringエンベッダータイプ名(例: "precomputed", "candle_bert", "openai"
paramsmap<string, string>タイプ固有のパラメータ(例: "model""sentence-transformers/all-MiniLM-L6-v2"

FieldOption は以下のフィールドタイプのいずれかを持つ oneof です。

Lexical フィールドVector フィールド
TextOption (indexed, stored, term_vectors, analyzer)HnswOption (dimension, distance, m, ef_construction, base_weight, quantizer, embedder, rerank_storage)
IntegerOption (indexed, stored, multi_valued)FlatOption (dimension, distance, base_weight, quantizer, embedder, rerank_storage)
FloatOption (indexed, stored, multi_valued)IvfOption (dimension, distance, n_clusters, n_probe, base_weight, quantizer, embedder, rerank_storage)
BooleanOption (indexed, stored)
DateTimeOption (indexed, stored)
GeoOption (indexed, stored)
Geo3dOption (indexed, stored)
BytesOption (stored)

ベクトルフィールドオプションの embedder フィールドには、Schema.embedders で定義したエンベッダー名を指定します。設定すると、インデックス時にドキュメントのテキストフィールドからベクトルを自動生成します。事前計算済みのベクトルを直接供給する場合は空のままにします。

距離メトリクス: COSINE, EUCLIDEAN, MANHATTAN, DOT_PRODUCT, ANGULAR

量子化手法: SCALAR_8BIT(デフォルト), PRODUCT_QUANTIZATION(Issue #481 Stage 3 で予約、現状 Unimplemented

NONE(量子化なし)は Issue #481 Stage 1 で廃止されました。proto enum 値 0(QUANTIZATION_METHOD_NONE)は wire 互換のため予約されていますが、サーバ側で受信すると Default::default()SCALAR_8BIT)にフォールバックします。

Rerank storage: オプションの rerank_storage フィールド(enum RerankStorageKind: UNSPECIFIED = サイドカーなし、F32)は Stage-2 rerank サイドカー(Issue #481 / #793)を有効化します。HNSW フィールドで F32 を設定すると、commit 時に完全精度の .hnsw.f32 サイドカーを追加で書き出し、rerank_factor を指定した検索が int8 候補を元のベクトルで再スコアします。フィールドを省略(または UNSPECIFIED)すると Stage-1 の int8 のみのランキングになります。スキーマの round-trip 整合のため FlatOption / IvfOption にも保持されますが、これらのインデックスはまだサイドカーを出力しません。

QuantizationConfig 構造:

フィールド説明
methodQuantizationMethod量子化手法(QUANTIZATION_METHOD_SCALAR_8BIT または QUANTIZATION_METHOD_PRODUCT_QUANTIZATION)。0(NONE)は予約、サーバ側で SCALAR_8BIT にフォールバック。
subvector_countuint32サブベクトルの数(methodPRODUCT_QUANTIZATION の場合のみ使用。dimension を均等に割り切れる値を指定)。

例:

{
  "schema": {
    "fields": {
      "title": {"text": {"indexed": true, "stored": true, "term_vectors": true}},
      "embedding": {"hnsw": {"dimension": 384, "distance": "DISTANCE_METRIC_COSINE", "m": 16, "ef_construction": 200}}
    },
    "default_fields": ["title"]
  }
}

GetIndex

インデックスの統計情報を取得します。

rpc GetIndex(GetIndexRequest) returns (GetIndexResponse);

レスポンスフィールド:

フィールド説明
document_countuint64インデックス内のドキュメント総数
vector_fieldsmap<string, VectorFieldStats>フィールドごとのベクトル統計情報

VectorFieldStats には vector_countdimension が含まれます。

GetSchema

現在のインデックススキーマを取得します。

rpc GetSchema(GetSchemaRequest) returns (GetSchemaResponse);

レスポンスフィールド:

フィールド説明
schemaSchemaインデックスのスキーマ

AddField

稼働中のインデックスにフィールドを動的に追加します。

rpc AddField(AddFieldRequest) returns (AddFieldResponse);

リクエストフィールド:

フィールド説明
namestringフィールド名
field_optionFieldOptionフィールド設定

レスポンスフィールド:

フィールド説明
schemaSchemaフィールド追加後の更新済みスキーマ

HTTP ゲートウェイ: POST /v1/schema/fields

DeleteField

稼働中のインデックスからフィールドを動的に削除します。既にインデックスされたデータは残りますが、削除されたフィールドにはアクセスできなくなります。

rpc DeleteField(DeleteFieldRequest) returns (DeleteFieldResponse);

message DeleteFieldRequest {
  string name = 1;
}

message DeleteFieldResponse {
  Schema schema = 1;
}

リクエストフィールド:

フィールド必須説明
namestringはい削除するフィールド名

レスポンス: 更新後の Schema を返します。


DocumentService

PutDocument

ID を指定してドキュメントを挿入または置換します。同じ ID のドキュメントが既に存在する場合は置換されます。

rpc PutDocument(PutDocumentRequest) returns (PutDocumentResponse);

リクエストフィールド:

フィールド必須説明
idstringはい外部ドキュメント ID
documentDocumentはいドキュメントの内容

Document 構造:

message Document {
  map<string, Value> fields = 1;
}

Value は以下の型のいずれかを持つ oneof です。

Proto フィールド説明
Nullnull_valueNull 値
Booleanbool_valueブール値
Integerint64_value64 ビット符号付き整数
Floatfloat64_value64 ビット浮動小数点数
Texttext_valueUTF-8 文字列
Bytesbytes_valueバイト列
Vectorvector_valueVectorValue(浮動小数点数のリスト)
DateTimedatetime_valueUnix マイクロ秒(UTC)
Geogeo_valueGeoPoint(緯度、経度)
Int64Arrayint64_array_valueInt64ArrayValue(多値整数。IntegerOption.multi_valued = true を要求)
Float64Arrayfloat64_array_valueFloat64ArrayValue(多値浮動小数点数。FloatOption.multi_valued = true を要求)
Geo3dgeo3d_valueGeo3dPoint(x, y, z メートル単位、ECEF 直交座標系)

Geo3dPoint:

フィールド説明
xdoubleX 座標(メートル単位、ECEF: 赤道面、+X 方向は経度 0°)
ydoubleY 座標(メートル単位、ECEF: 赤道面、+Y 方向は東経 90°)
zdoubleZ 座標(メートル単位、ECEF: +Z 方向は北極)

座標系の詳細および wgs84_to_ecef / ecef_to_wgs84 の変換ユーティリティについては 3D 地理検索 (ECEF) を参照してください。

AddDocument

ドキュメントを追加します。PutDocument と異なり、同じ ID の既存ドキュメントを置換しません。複数のドキュメントが同じ ID を共有できます(チャンキングパターン)。

rpc AddDocument(AddDocumentRequest) returns (AddDocumentResponse);

リクエストフィールドは PutDocument と同じです。

GetDocuments

指定された外部 ID に一致するすべてのドキュメントを取得します。

rpc GetDocuments(GetDocumentsRequest) returns (GetDocumentsResponse);

リクエストフィールド:

フィールド必須説明
idstringはい外部ドキュメント ID

レスポンスフィールド:

フィールド説明
documentsrepeated Document一致するドキュメント

DeleteDocuments

指定された外部 ID に一致するすべてのドキュメントを削除します。

rpc DeleteDocuments(DeleteDocumentsRequest) returns (DeleteDocumentsResponse);

Commit

保留中の変更(追加および削除)をインデックスにコミットします。コミットされるまで、変更は検索に反映されません。

rpc Commit(CommitRequest) returns (CommitResponse);

SearchService

検索クエリを実行し、結果を単一のレスポンスとして返します。

rpc Search(SearchRequest) returns (SearchResponse);

レスポンスフィールド:

フィールド説明
resultsrepeated SearchResult関連度順の検索結果
total_hitsuint64マッチするドキュメントの総数(limit/offset 適用前)

SearchStream

検索クエリを実行し、結果を 1 件ずつストリーミングで返します。

rpc SearchStream(SearchRequest) returns (stream SearchResult);

SearchRequest フィールド

フィールド必須説明
querystringいいえQuery DSL による Lexical 検索クエリ
query_vectorsrepeated QueryVectorいいえベクトル検索クエリ
limituint32いいえ最大結果件数(デフォルト: エンジンのデフォルト値)
offsetuint32いいえスキップする結果件数
fusionFusionAlgorithmいいえハイブリッド検索の Fusion アルゴリズム
lexical_paramsLexicalParamsいいえLexical 検索パラメータ
vector_paramsVectorParamsいいえベクトル検索パラメータ
field_boostsmap<string, float>いいえフィールドごとのスコアブースト

query または query_vectors のいずれか 1 つ以上を指定する必要があります。

3D 地理クエリ

3D ECEF の地理クエリは SearchRequest.query に渡す Lexical DSL 文字列で表現します。専用のメッセージ型はなく、コアライブラリで使用される DSL 形式がそのまま gRPC 経由でも動作します。3 種類の形式があります(構文の詳細は Query DSL → 3D 地理クエリ を参照):

  • position:geo3d_distance(x, y, z, distance_m)(x, y, z) を中心とした最大距離(メートル単位)の球
  • position:geo3d_bbox(min_x, min_y, min_z, max_x, max_y, max_z) — 3D 軸並行バウンディングボックス
  • position:geo3d_nearest(x, y, z, k)(x, y, z) に最も近い k 個の近傍点

position はフィールド名で、スキーマで宣言した実際の Geo3d 型フィールドに置き換えてください。すべての数値引数は符号付きの double 値で、k は符号なし整数です。

QueryVector

フィールド説明
vectorrepeated floatクエリベクトル
weightfloatこのベクトルの重み(デフォルト: 1.0)
fieldsrepeated string対象のベクトルフィールド(空の場合は全フィールド)

FusionAlgorithm

以下の 2 つのオプションを持つ oneof です。

  • RRF (Reciprocal Rank Fusion): k パラメータ(デフォルト: 60)
  • WeightedSum: lexical_weightvector_weight

LexicalParams

フィールド説明
min_scorefloat最小スコア閾値
timeout_msuint64検索タイムアウト(ミリ秒)
parallelbool並列検索を有効化
sort_bySortSpecスコアの代わりにフィールドでソート

SortSpec

フィールド説明
fieldstringソート対象のフィールド名。空文字列はスコアでソートすることを意味する
orderSortOrderSORT_ORDER_ASC(昇順)または SORT_ORDER_DESC(降順)

VectorParams

フィールド説明
fieldsrepeated string対象のベクトルフィールド
score_modeVectorScoreModeWEIGHTED_SUM, MAX_SIM, または LATE_INTERACTION
overfetchfloatオーバーフェッチ係数(デフォルト: 2.0)
min_scorefloat最小スコア閾値
rerank_factoroptional uint32Stage 2 rerank の widening 係数(Issue #481)。rerank_storage を有効にした HNSW フィールドに対してこの値を設定すると、サーバは int8 候補取得を top_k * rerank_factor まで広げ、元の完全精度ベクトルで再スコアしてから上位 top_k を返します。rerank_storage = "F32" を指定した HNSW フィールドのみで反映され、それ以外(Stage 1 セグメント、Flat、IVF)では silent に int8 ランキングへフォールバックします — Stage 1 セグメントから f32 情報を復元することはできません。0 または省略で rerank 無効。

SearchResult

フィールド説明
idstring外部ドキュメント ID
scorefloat関連度スコア
documentDocumentドキュメントの内容

{
  "query": "body:rust",
  "query_vectors": [
    {"vector": [0.1, 0.2, 0.3], "weight": 1.0}
  ],
  "limit": 10,
  "fusion": {
    "rrf": {"k": 60}
  },
  "field_boosts": {
    "title": 2.0
  }
}

エラーハンドリング

gRPC エラーは標準の Status コードとして返されます。

Laurus エラーgRPC ステータス発生条件
Schema / Query / Field / JSONINVALID_ARGUMENT不正なリクエストまたはスキーマ
インデックス未オープンFAILED_PRECONDITIONCreateIndex の前に RPC が呼び出された場合
インデックスが既に存在ALREADY_EXISTSCreateIndex が 2 回呼び出された場合
未実装UNIMPLEMENTEDまだサポートされていない機能
内部エラーINTERNALI/O、ストレージ、または予期しないエラー