gRPC API リファレンス
すべてのサービスは laurus.v1 protobuf パッケージで定義されています。
サービス一覧
| サービス | RPC | 説明 |
|---|---|---|
HealthService | Check | ヘルスチェック |
IndexService | CreateIndex, GetIndex, GetSchema, AddField, DeleteField | インデックスのライフサイクルとスキーマ |
DocumentService | PutDocument, AddDocument, PutDocuments, AddDocuments, GetDocuments, DeleteDocuments, Commit, FlushWal | ドキュメント CRUD・バルクインジェスト・コミット・WAL flush |
SearchService | Search, SearchStream | 単発検索とストリーミング検索 |
HealthService
Check
サーバーの現在のサービング状態を返します。
rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
レスポンスフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
status | ServingStatus | サーバーの準備が完了している場合は SERVING_STATUS_SERVING |
IndexService
CreateIndex
指定されたスキーマで新しいインデックスを作成します。インデックスが既に開いている場合は ALREADY_EXISTS エラーを返します。
rpc CreateIndex(CreateIndexRequest) returns (CreateIndexResponse);
リクエストフィールド:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
schema | Schema | はい | インデックスのスキーマ定義 |
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(文字フィルター、トークナイザー、トークンフィルターに使用):
| フィールド | 型 | 説明 |
|---|---|---|
type | string | コンポーネントタイプ名(例: "whitespace", "lowercase", "unicode_normalization") |
params | map<string, string> | タイプ固有のパラメータ(文字列のキーと値のペア) |
EmbedderConfig:
| フィールド | 型 | 説明 |
|---|---|---|
type | string | エンベッダータイプ名(例: "precomputed", "candle_bert", "candle_colbert", "openai") |
params | map<string, string> | タイプ固有のパラメータ(例: "model" → "sentence-transformers/all-MiniLM-L6-v2")。"candle_colbert"(Issue #1349)は、任意で "revision"、"query_maxlen"、"doc_maxlen" も受け付けます。長さは "32" のような 10 進の文字列で、それ以外は拒否されます |
各 FieldOption は以下のフィールドタイプのいずれかを持つ oneof です。
| Lexical フィールド | Vector フィールド |
|---|---|
TextOption (indexed, stored, multi_valued, position_increment_gap, term_vectors, doc_values, analyzer) | HnswOption (dimension, distance, m, ef_construction, base_weight, quantizer, embedder, rerank_storage, pq_codebook_path) |
IntegerOption (indexed, stored, multi_valued, doc_values) | FlatOption (dimension, distance, base_weight, quantizer, embedder, rerank_storage) |
FloatOption (indexed, stored, multi_valued, doc_values) | IvfOption (dimension, distance, n_clusters, n_probe, base_weight, quantizer, embedder, rerank_storage) |
BooleanOption (indexed, stored, multi_valued, doc_values) | MultiVectorOption (dimension, distance, embedder, storage) |
DateTimeOption (indexed, stored, multi_valued, doc_values) | |
GeoOption (indexed, stored, multi_valued, doc_values) | |
Geo3dOption (indexed, stored, multi_valued, doc_values) | |
BytesOption (stored, multi_valued) |
ベクトルフィールドオプションの embedder フィールドには、Schema.embedders で定義したエンベッダー名を指定します。設定すると、インデックス時にドキュメントのテキストフィールドからベクトルを自動生成します。事前計算済みのベクトルを直接供給する場合は空のままにします。
Doc values: doc_values(Issue #1047)は、上記の BytesOption を除く全ての lexical オプションで optional bool であり、term_vectors と同じ tri-state の契約に従います。クライアントが省略するとエンジンのデフォルト(true)になり、明示的な false とは区別されます。フィールドの値を DocValues(ソート・ファセット・集計が読み取る列指向ストア)にもコピーするかどうかを制御し、DocValues 列が書き込まれるのは stored と doc_values の両方が true の場合のみです。BytesOption にはこのフィールドがありません —— Bytes の値は設定にかかわらず DocValues に一切書き込まれないためです。ソートにもファセットにも使わないフィールドで doc_values を無効にするとセグメントの使用容量が削減されます。フィールド自体は引き続き完全に検索・取得可能です。
多値地理・多値日時・多値ブール・多値テキスト・多値バイト(multi-valued geo, datetime, boolean, text and bytes): GeoOption / Geo3dOption(Issue #1174)、DateTimeOption(Issue #1184)、および BooleanOption(Issue #1180)の multi_valued は proto のフィールド番号 4 です(IntegerOption / FloatOption と異なり、3 は既に doc_values が使用しているため)。TextOption(Issue #1175)ではフィールド番号 6 です(Text は 3〜5 を既に term_vectors・analyzer・doc_values に使用しているため)。BytesOption(Issue #1176)ではフィールド番号 2 です(1 は既に stored が使用しており、BytesOption には indexed も doc_values もありません)。true にすると地理フィールドは GeoArrayValue / Geo3dArrayValue(後述の Value 表を参照)を受け付け、距離 / バウンディングボックスクエリ(および geo3d_nearest)はいずれかのポイントが条件を満たせばドキュメントにマッチし、最も近いポイントでスコアリングされます。日時フィールドは DatetimeArrayValue(repeated int64。datetime_value と同じ UTC の Unix マイクロ秒)を受け付け、範囲クエリはいずれかの時刻が範囲内にあればドキュメントにマッチします(スコアは constant。複数の時刻がマッチしてもドキュメントは 1 回だけ報告されます)。ブールフィールドは BoolArrayValue(repeated bool)を受け付け、term クエリはいずれかの要素がクエリの値と等しければドキュメントにマッチします。各要素はそれぞれ独立した true / false の term posting としてインデックスされ(ブールに BKD ポイントはありません)、要素の重複はヒット数ではなく term frequency(したがって BM25 スコア)を増やします。テキストフィールドは TextArrayValue(repeated string)を受け付け、term クエリはいずれかの要素がタームを含めばドキュメントにマッチします。position_increment_gap(フィールド 7、optional uint32)は連続する要素の間に挿入される位置数で、slop がこの値に達しない限りフレーズクエリが 2 つの要素をまたがないようにします。term_vectors / doc_values と同じ理由で optional になっており、省略時は 0 ではなくエンジンのデフォルト(100)を意味します。バイトフィールドは BytesArrayValue(repeated bytes)を受け付けますが、Bytes の値はそもそもレキシカルインデックスされないため “any match” のクエリ意味論は一切なく、保存時・ワイヤ上の形と取り込み時の許容個数を変えるだけです。また、スカラーの bytes_value と同じく、DataValue::BytesArray が持つ要素ごとの MIME タイプはワイヤ上に表現されません。
MultiVector フィールド: MultiVectorOption(FieldOption のフィールド番号 12、Issue #1177)は、文書ごとのトークンベクトル(ColBERT 型のトークンごとの埋め込みなど)を late interaction の再採点のために保持するフィールドを宣言します。ANN 索引は持たず、ベクトル検索の対象にはなりません。query_vectors でこのフィールドを指定すると拒否されます。distance は COSINE(書き込み時に L2 正規化する)か DOT_PRODUCT でなければなりません。値は VectorArrayValue(下の Value の表を参照)です。このフィールドは保存されないため、サーバーが返す文書には含まれません。embedder(フィールド番号 3、Issue #1349)には、Schema.embedders で宣言したトークン単位のエンベッダー("candle_colbert")の名前を指定します。指定すると、文書はこのフィールドに text_value を与えられ、テキストはトークンベクトルに埋め込まれます。MultiVector フィールドに置けるのは "candle_colbert" か "precomputed" のエンベッダーだけで、他のベクトルフィールドには "candle_colbert" を置けません。
MultiVector のストレージ: オプションの storage フィールド(フィールド番号 4、enum MultiVectorStorage、Issue #1346)は、各トークンベクトルのディスク上の要素形式を選びます。UNSPECIFIED は F32 と同じ、F32(デフォルト。4 バイト/要素、誤差なし)、F16(2 バイト/要素、要素あたり相対誤差 ~2⁻¹¹)、INT8(約 1 バイト/要素に加えてベクトルごとの小さなスケールのオーバーヘッド — 1 行あたり dimension + 2 バイト — ベクトルごとのスケール max(abs(vector)) / 127 を使用し、セグメント単位やコーパス全体で学習するものではありません)のいずれかです。300 トークン × 128 次元(F32 で約 150 KB/文書)の場合、F16 は約 75 KB/文書、INT8 は約 38 KB/文書になります。未設定時は F32 のままです。
距離メトリクス: COSINE, EUCLIDEAN, MANHATTAN, DOT_PRODUCT, ANGULAR
量子化手法: SCALAR_8BIT(デフォルト), PRODUCT_QUANTIZATION(Issue #481 Stage 3。HNSW インデックスがサポート — Flat / IVF は書き込み時に拒否)
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 のみのランキングになります。#932 以降、サイドカーは 3 つのベクトルインデックスタイプ(HNSW / Flat / IVF)すべてで出力・利用されます(Flat / IVF の再スコアはフィールド指定クエリに適用)。
共有 PQ codebook: HnswOption のオプションフィールド pq_codebook_path(Issue #631)は、laurus train pq-codebook CLI コマンドで一度だけ学習するストレージ相対の共有 PQ codebook ファイルを指定します。設定すると segment は commit / merge のたびに k-means を再学習する代わりに、学習済み codebook で encode されます。PRODUCT_QUANTIZATION quantizer との組み合わせでのみ意味を持ち、設定済みで未学習の場合、commit は学習コマンドを示すエラーで失敗します(per-segment 学習への無言のフォールバック無し)。未設定なら per-segment 学習のままです。
Base weight: HnswOption/FlatOption/IvfOption の base_weight は optional float(Issue #1084)です。クライアントが省略するとエンジンのデフォルト(1.0)が使われ、これは明示的な 0.0 とは区別されます。他の vector フィールドと同時にクエリ対象になったときの、そのフィールドの相対的なスコアリング優先度を設定します。何に効いて何に効かないかはウェイトを参照してください。
QuantizationConfig 構造:
| フィールド | 型 | 説明 |
|---|---|---|
method | QuantizationMethod | 量子化手法(QUANTIZATION_METHOD_SCALAR_8BIT または QUANTIZATION_METHOD_PRODUCT_QUANTIZATION)。0(NONE)は予約、サーバ側で SCALAR_8BIT にフォールバック。 |
subvector_count | uint32 | サブベクトルの数(method が PRODUCT_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_count | uint64 | インデックス内のドキュメント総数 |
vector_fields | map<string, VectorFieldStats> | フィールドごとのベクトル統計情報 |
各 VectorFieldStats には vector_count と dimension が含まれます。
GetSchema
現在のインデックススキーマを取得します。
rpc GetSchema(GetSchemaRequest) returns (GetSchemaResponse);
レスポンスフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
schema | Schema | インデックスのスキーマ |
AddField
稼働中のインデックスにフィールドを動的に追加します。
rpc AddField(AddFieldRequest) returns (AddFieldResponse);
リクエストフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
name | string | フィールド名 |
field_option | FieldOption | フィールド設定 |
レスポンスフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
schema | Schema | フィールド追加後の更新済みスキーマ |
HTTP ゲートウェイ: POST /v1/schema/fields
DeleteField
稼働中のインデックスからフィールドを動的に削除します。既にインデックスされたデータは残りますが、削除されたフィールドにはアクセスできなくなります。
rpc DeleteField(DeleteFieldRequest) returns (DeleteFieldResponse);
message DeleteFieldRequest {
string name = 1;
}
message DeleteFieldResponse {
Schema schema = 1;
}
リクエストフィールド:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | はい | 削除するフィールド名 |
レスポンス: 更新後の Schema を返します。
DocumentService
PutDocument
ID を指定してドキュメントを挿入または置換します。同じ ID のドキュメントが既に存在する場合は置換されます。
rpc PutDocument(PutDocumentRequest) returns (PutDocumentResponse);
リクエストフィールド:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | はい | 外部ドキュメント ID |
document | Document | はい | ドキュメントの内容 |
Document 構造:
message Document {
map<string, Value> fields = 1;
}
各 Value は以下の型のいずれかを持つ oneof です。
| 型 | Proto フィールド | 説明 |
|---|---|---|
| Null | null_value | Null 値 |
| Boolean | bool_value | ブール値 |
| Integer | int64_value | 64 ビット符号付き整数 |
| Float | float64_value | 64 ビット浮動小数点数 |
| Text | text_value | UTF-8 文字列 |
| Bytes | bytes_value | バイト列 |
| Vector | vector_value | VectorValue(浮動小数点数のリスト) |
| DateTime | datetime_value | Unix マイクロ秒(UTC) |
| Geo | geo_value | GeoPoint(緯度、経度) |
| Int64Array | int64_array_value | Int64ArrayValue(多値整数。IntegerOption.multi_valued = true を要求) |
| Float64Array | float64_array_value | Float64ArrayValue(多値浮動小数点数。FloatOption.multi_valued = true を要求) |
| Geo3d | geo3d_value | Geo3dPoint(x, y, z メートル単位、ECEF 直交座標系) |
| GeoArray | geo_array_value | GeoArrayValue(repeated GeoPoint。多値 2D ポイント。GeoOption.multi_valued = true を要求) |
| Geo3dArray | geo3d_array_value | Geo3dArrayValue(repeated Geo3dPoint。多値 3D ポイント。Geo3dOption.multi_valued = true を要求) |
| DateTimeArray | datetime_array_value | DatetimeArrayValue(repeated int64 Unix マイクロ秒。多値の時刻。DateTimeOption.multi_valued = true を要求) |
| BoolArray | bool_array_value | BoolArrayValue(repeated bool。多値ブール。BooleanOption.multi_valued = true を要求) |
| TextArray | text_array_value | TextArrayValue(repeated string。多値テキスト。TextOption.multi_valued = true を要求) |
| BytesArray | bytes_array_value | BytesArrayValue(repeated bytes。多値バイト列。MIME はワイヤ上に含まれない。BytesOption.multi_valued = true を要求) |
| VectorArray | vector_array_value | VectorArrayValue(uint32 dimension と repeated float values。トークンベクトルを行優先で詰めたもので、values.len() / dimension 本のベクトル。MultiVectorOption のフィールドを要求) |
Geo3dPoint:
| フィールド | 型 | 説明 |
|---|---|---|
x | double | X 座標(メートル単位、ECEF: 赤道面、+X 方向は経度 0°) |
y | double | Y 座標(メートル単位、ECEF: 赤道面、+Y 方向は東経 90°) |
z | double | Z 座標(メートル単位、ECEF: +Z 方向は北極) |
座標系の詳細および wgs84_to_ecef / ecef_to_wgs84 の変換ユーティリティについては 3D 地理検索 (ECEF) を参照してください。
AddDocument
ドキュメントを追加します。PutDocument と異なり、同じ ID の既存ドキュメントを置換しません。複数のドキュメントが同じ ID を共有できます(チャンキングパターン)。
rpc AddDocument(AddDocumentRequest) returns (AddDocumentResponse);
リクエストフィールドは PutDocument と同じです。
PutDocuments
バッチ Upsert。エントリは入力順に逐次適用され、バッチ全体で WAL fsync は 1 回です — ドキュメントごとに PutDocument を呼ぶよりはるかに高速です。1 バッチ内で重複した ID は、同じ put を 1 件ずつ発行した場合とまったく同じようにデデュープされます(最後の出現が勝ち)。
rpc PutDocuments(PutDocumentsRequest) returns (PutDocumentsResponse);
message DocumentEntry {
string id = 1;
Document document = 2;
}
message PutDocumentsRequest {
repeated DocumentEntry documents = 1;
}
message PutDocumentsResponse {
uint32 applied = 1; // 成功時はリクエストサイズと一致
}
適用できない最初のエントリで fail-fast します。適用済みエントリはロールバックされず(次のコミットで永続化)、エラーステータスのメッセージに失敗位置・その ID・適用済み件数が含まれるため、バッチ(またはその suffix)の再試行は冪等です。呼び出し側の誤り(スキーマ違反など)で失敗したバッチは INVALID_ARGUMENT、ストレージ障害は INTERNAL を返します。
AddDocuments
バッチチャンク追加。PutDocuments と同様ですが既存ドキュメントを削除しないため、同一論理ドキュメントの複数チャンクを追加する目的で ID をバッチ内で繰り返せます。
rpc AddDocuments(AddDocumentsRequest) returns (AddDocumentsResponse);
リクエスト/レスポンスのフィールドは PutDocuments と対になります。
GetDocuments
指定された外部 ID に一致するすべてのドキュメントを取得します。
rpc GetDocuments(GetDocumentsRequest) returns (GetDocumentsResponse);
リクエストフィールド:
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
id | string | はい | 外部ドキュメント ID |
レスポンスフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
documents | repeated Document | 一致するドキュメント |
DeleteDocuments
指定された外部 ID に一致するすべてのドキュメントを削除します。
rpc DeleteDocuments(DeleteDocumentsRequest) returns (DeleteDocumentsResponse);
Commit
保留中の変更(追加および削除)をインデックスにコミットします。コミットされるまで、変更は検索に反映されません。
rpc Commit(CommitRequest) returns (CommitResponse);
FlushWal
バッファされた WAL レコードを full commit なしで durable 化します。両メッセージとも空です。デフォルトの per-record sync ポリシーでは near no-op です(各書き込みは既に fsync 済み)。グループコミットポリシーでは、現在の partial batch をオンデマンドで flush し、クラッシュ時の損失窓を抑えます。Commit と異なりセグメントを materialize しないため、バッファされた変更は後続の Commit まで検索に反映されません。
rpc FlushWal(FlushWalRequest) returns (FlushWalResponse);
message FlushWalRequest {}
message FlushWalResponse {}
WAL の耐久性ポリシーはサーバ側の [index.wal] 設定セクションで構成します。設定 → [index.wal] セクション および 永続化と WAL → WAL 耐久性ポリシー を参照してください。
HTTP ゲートウェイ: POST /v1/flush_wal
SearchService
Search
検索クエリを実行し、結果を単一のレスポンスとして返します。
rpc Search(SearchRequest) returns (SearchResponse);
レスポンスフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
results | repeated SearchResult | 関連度順の検索結果 |
total_hits | uint64 | マッチするドキュメントの総数(limit/offset 適用前) |
SearchStream
検索クエリを実行し、結果を 1 件ずつストリーミングで返します。
rpc SearchStream(SearchRequest) returns (stream SearchResult);
SearchRequest フィールド
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
query | string | いいえ | Query DSL による Lexical 検索クエリ |
query_vectors | repeated QueryVector | いいえ | ベクトル検索クエリ |
limit | uint32 | いいえ | 最大結果件数(デフォルト: エンジンのデフォルト値) |
offset | uint32 | いいえ | スキップする結果件数 |
fusion | FusionAlgorithm | いいえ | ハイブリッド検索の Fusion アルゴリズム |
lexical_params | LexicalParams | いいえ | Lexical 検索パラメータ |
vector_params | VectorParams | いいえ | ベクトル検索パラメータ |
field_boosts | map<string, float> | いいえ | フィールドごとのスコアブースト |
highlight | HighlightParams | いいえ | フィールドごとのハイライト済みフラグメントを要求する(Issue #1134) |
rescore | RescoreParams | いいえ | 1 段目の上位の結果を late interaction で再採点する(Issue #1351) |
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
| フィールド | 型 | 説明 |
|---|---|---|
vector | repeated float | クエリベクトル |
weight | float | このベクトルの重み(デフォルト: 1.0) |
fields | repeated string | 対象のベクトルフィールド(空の場合は全フィールド) |
FusionAlgorithm
以下の 2 つのオプションを持つ oneof です。
- RRF (Reciprocal Rank Fusion):
kパラメータ(デフォルト: 60) - WeightedSum:
lexical_weightとvector_weight
LexicalParams
| フィールド | 型 | 説明 |
|---|---|---|
min_score | float | 最小スコア閾値 |
timeout_ms | uint64 | 検索タイムアウト(ミリ秒) |
parallel | bool | 並列検索を有効化 |
sort_by | SortSpec | スコアの代わりにフィールドでソート |
SortSpec
| フィールド | 型 | 説明 |
|---|---|---|
field | string | ソート対象のフィールド名。空文字列はスコアでソートすることを意味する |
order | SortOrder | SORT_ORDER_ASC(昇順)または SORT_ORDER_DESC(降順) |
VectorParams
| フィールド | 型 | 説明 |
|---|---|---|
fields | repeated string | 対象のベクトルフィールド |
score_mode | VectorScoreMode | WEIGHTED_SUM, MAX_SIM, または LATE_INTERACTION |
overfetch | float | オーバーフェッチ係数(デフォルト: 2.0) |
min_score | float | 最小スコア閾値 |
rerank_factor | optional uint32 | Stage 2 rerank の widening 係数(Issue #481)。rerank_storage を有効にしたフィールドに対してこの値を設定すると、サーバは int8/PQ 候補取得を top_k * rerank_factor まで広げ、元の完全精度ベクトルで再スコアしてから上位 top_k を返します。#932 以降 3 つのベクトルインデックスタイプ(HNSW・Flat・IVF)すべてで反映されます(Flat/IVF はフィールド指定クエリに適用)。rerank_storage = "F32" を設定していないフィールドでは silent に int8 ランキングへフォールバックします — f32 情報を復元することはできません。0 または省略で rerank 無効。 |
ef_search | optional uint32 | HNSW の ef_search 候補リストサイズをクエリ単位で上書き(Issue #644)。PQ → SQ → f32 の3段 rerank チェーン(Issue #673)も、この値がゲートとなります。rerank_storage を有効にした PQ フィールドで ef_search を top_k * rerank_factor より広く設定すると、グラフが計算した候補集合全体を安価な int8 段で再ランキングしてから exact 段の狭い予算を切り出すようになります(rerank_storage サイドカーから導出、追加設定不要)。HNSW 以外のフィールドでは無視されます。 |
HighlightParams
指定したフィールドのハイライト済みフラグメントを要求します(Issue #1134)。ハイライトは SearchRequest.query(DSL クエリの lexical 節)— つまり lexical スコアリングを駆動するのと同じクエリ — によって行われます。filter_query はハイライト対象の語を提供せず、lexical クエリを持たない Vector-only のリクエストはハイライトを生成しません。stored: true のテキストフィールドのみハイライト可能で、それ以外のフィールド名は黙ってスキップされます。詳細な意味論はハイライトを参照してください。
| フィールド | 型 | 説明 |
|---|---|---|
fields | repeated string | ハイライト対象の保存済みテキストフィールド。必須 — 未設定または空の場合は INVALID_ARGUMENT で拒否される |
max_fragments | optional uint32 | フィールドあたりの最大フラグメント数(デフォルト: 5)。0 は拒否される |
fragment_size | optional uint32 | フラグメントの目標文字数(デフォルト: 150)。0 は拒否される |
tag | optional string | マッチを囲む HTML タグ(デフォルト: "mark")。空文字列は未設定として扱われる |
css_class | optional string | タグに追加する CSS クラス。空文字列は未設定として扱われる |
require_field_match | optional bool | ハイライト対象フィールドを対象とするクエリ語のみを使う(デフォルト: true) |
max_analyzed_chars | optional uint64 | フィールドのテキストのうち解析する最大文字数(デフォルト: 1,000,000) |
return_entire_field_if_no_highlight | optional bool | マッチがない場合にフィールド全体を1つのフラグメントとして返す(デフォルト: false) |
Highlights
| フィールド | 型 | 説明 |
|---|---|---|
fragments | repeated string | 1 フィールド分のハイライト済みフラグメント(最も良いフラグメントが先頭) |
RescoreParams
1 段目(lexical・vector・ハイブリッド)の上位 window_size 件を、MultiVector
フィールドに対する ColBERT 型の late interaction で並べ替えます(Issue #1351)。
採点と並び順の規則は
late interaction による再採点
を参照してください。
| フィールド | 型 | 説明 |
|---|---|---|
window_size | optional uint32 | 再採点する 1 段目の上位の件数。1〜10,000。未設定なら 100 |
late_interaction | LateInteractionRescore | 再採点の方法(oneof、必須) |
LateInteractionRescore:
| フィールド | 型 | 説明 |
|---|---|---|
field | string | MultiVector フィールド |
vectors | VectorArrayValue | クエリのトークンベクトル。文書の値と同じく行ごとに詰める(フィールドの次元のベクトルを 1〜1,024 本)。vectors と text のどちらか一方が必須 |
text | string | クエリのテキスト。フィールドのトークン単位のエンベッダー(candle_colbert)が埋め込む |
値はエンジンが検査します。範囲外の window、MultiVector でないフィールド、
ベクトルの本数や次元の誤り、トークン単位のエンベッダーがないフィールドへの
テキスト、lexical_params.sort_by との併用は、INVALID_ARGUMENT で拒否されます。
late_interaction やクエリのない RescoreParams も同じです。
SearchResult
| フィールド | 型 | 説明 |
|---|---|---|
id | string | 外部ドキュメント ID |
score | float | 関連度スコア。再採点した結果では late interaction(MaxSim)のスコア |
document | Document | ドキュメントの内容 |
highlights | map<string, Highlights> | SearchRequest.highlight.fields で指定したフィールドごとのハイライト済みフラグメント。ハイライトがないフィールドはこのマップに現れない |
例
{
"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
}
}
例: ハイライト
{
"query": "body:rust",
"limit": 10,
"highlight": {"fields": ["body"], "max_fragments": 2, "tag": "em"}
}
マッチしたヒットの SearchResult は以下のようになります。
{
"id": "doc1",
"score": 1.2,
"document": {"fields": {"body": {"text_value": "Rust is great"}}},
"highlights": {"body": {"fragments": ["<em>Rust</em> is great"]}}
}
例: 再採点
ハイブリッドの 1 段目の上位 100 件を、body_colbert の ColBERT エンベッダーで
再採点します。
{
"query": "body:lifetimes body_vec:\"how do lifetimes work\"",
"limit": 10,
"rescore": {
"window_size": 100,
"late_interaction": {"field": "body_colbert", "text": "how do lifetimes work"}
}
}
テキストの代わりに、計算済みのクエリのトークンベクトルを渡す場合:
{
"late_interaction": {
"field": "body_colbert",
"vectors": {"dimension": 2, "values": [1.0, 0.0, 0.0, 1.0]}
}
}
エラーハンドリング
gRPC エラーは標準の Status コードとして返されます。
| Laurus エラー | gRPC ステータス | 発生条件 |
|---|---|---|
| Schema / Query / Field / Invalid argument / JSON | INVALID_ARGUMENT | 不正なリクエストまたはスキーマ、クエリ内の不明なフィールド |
| インデックス未オープン | FAILED_PRECONDITION | CreateIndex の前に RPC が呼び出された場合 |
| インデックスが既に存在 | ALREADY_EXISTS | CreateIndex が 2 回呼び出された場合 |
| 未実装 | UNIMPLEMENTED | まだサポートされていない機能 |
| 内部エラー | INTERNAL | I/O、ストレージ、または予期しないエラー |