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, PutDocuments, AddDocuments, GetDocuments, DeleteDocuments, Commit, FlushWalドキュメント CRUD・バルクインジェスト・コミット・WAL flush
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", "candle_colbert", "openai")
paramsmap<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 構造:

フィールド型説明
methodQuantizationMethod量子化手法(QUANTIZATION_METHOD_SCALAR_8BIT または QUANTIZATION_METHOD_PRODUCT_QUANTIZATION)。0(NONE)は予約、サーバ側で SCALAR_8BIT にフォールバック。
subvector_countuint32サブベクトルの数(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_countuint64インデックス内のドキュメント総数
vector_fieldsmap<string, VectorFieldStats>フィールドごとのベクトル統計情報

各 VectorFieldStats には vector_count と dimension が含まれます。

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 直交座標系)
GeoArraygeo_array_valueGeoArrayValue(repeated GeoPoint。多値 2D ポイント。GeoOption.multi_valued = true を要求)
Geo3dArraygeo3d_array_valueGeo3dArrayValue(repeated Geo3dPoint。多値 3D ポイント。Geo3dOption.multi_valued = true を要求)
DateTimeArraydatetime_array_valueDatetimeArrayValue(repeated int64 Unix マイクロ秒。多値の時刻。DateTimeOption.multi_valued = true を要求)
BoolArraybool_array_valueBoolArrayValue(repeated bool。多値ブール。BooleanOption.multi_valued = true を要求)
TextArraytext_array_valueTextArrayValue(repeated string。多値テキスト。TextOption.multi_valued = true を要求)
BytesArraybytes_array_valueBytesArrayValue(repeated bytes。多値バイト列。MIME はワイヤ上に含まれない。BytesOption.multi_valued = true を要求)
VectorArrayvector_array_valueVectorArrayValue(uint32 dimension と repeated float values。トークンベクトルを行優先で詰めたもので、values.len() / dimension 本のベクトル。MultiVectorOption のフィールドを要求)

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 と同じです。

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);

リクエストフィールド:

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

レスポンスフィールド:

フィールド型説明
documentsrepeated 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

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

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>いいえフィールドごとのスコアブースト
highlightHighlightParamsいいえフィールドごとのハイライト済みフラグメントを要求する(Issue #1134)
rescoreRescoreParamsいいえ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

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

FusionAlgorithm

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

  • RRF (Reciprocal Rank Fusion): k パラメータ(デフォルト: 60)
  • WeightedSum: lexical_weight と vector_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 を有効にしたフィールドに対してこの値を設定すると、サーバは int8/PQ 候補取得を top_k * rerank_factor まで広げ、元の完全精度ベクトルで再スコアしてから上位 top_k を返します。#932 以降 3 つのベクトルインデックスタイプ(HNSW・Flat・IVF)すべてで反映されます(Flat/IVF はフィールド指定クエリに適用)。rerank_storage = "F32" を設定していないフィールドでは silent に int8 ランキングへフォールバックします — f32 情報を復元することはできません。0 または省略で rerank 無効。
ef_searchoptional uint32HNSW の 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 のテキストフィールドのみハイライト可能で、それ以外のフィールド名は黙ってスキップされます。詳細な意味論はハイライトを参照してください。

フィールド型説明
fieldsrepeated stringハイライト対象の保存済みテキストフィールド。必須 — 未設定または空の場合は INVALID_ARGUMENT で拒否される
max_fragmentsoptional uint32フィールドあたりの最大フラグメント数(デフォルト: 5)。0 は拒否される
fragment_sizeoptional uint32フラグメントの目標文字数(デフォルト: 150)。0 は拒否される
tagoptional stringマッチを囲む HTML タグ(デフォルト: "mark")。空文字列は未設定として扱われる
css_classoptional stringタグに追加する CSS クラス。空文字列は未設定として扱われる
require_field_matchoptional boolハイライト対象フィールドを対象とするクエリ語のみを使う(デフォルト: true)
max_analyzed_charsoptional uint64フィールドのテキストのうち解析する最大文字数(デフォルト: 1,000,000)
return_entire_field_if_no_highlightoptional boolマッチがない場合にフィールド全体を1つのフラグメントとして返す(デフォルト: false)

Highlights

フィールド型説明
fragmentsrepeated string1 フィールド分のハイライト済みフラグメント(最も良いフラグメントが先頭)

RescoreParams

1 段目(lexical・vector・ハイブリッド)の上位 window_size 件を、MultiVector フィールドに対する ColBERT 型の late interaction で並べ替えます(Issue #1351)。 採点と並び順の規則は late interaction による再採点 を参照してください。

フィールド型説明
window_sizeoptional uint32再採点する 1 段目の上位の件数。1〜10,000。未設定なら 100
late_interactionLateInteractionRescore再採点の方法(oneof、必須)

LateInteractionRescore:

フィールド型説明
fieldstringMultiVector フィールド
vectorsVectorArrayValueクエリのトークンベクトル。文書の値と同じく行ごとに詰める(フィールドの次元のベクトルを 1〜1,024 本)。vectors と text のどちらか一方が必須
textstringクエリのテキスト。フィールドのトークン単位のエンベッダー(candle_colbert)が埋め込む

値はエンジンが検査します。範囲外の window、MultiVector でないフィールド、 ベクトルの本数や次元の誤り、トークン単位のエンベッダーがないフィールドへの テキスト、lexical_params.sort_by との併用は、INVALID_ARGUMENT で拒否されます。 late_interaction やクエリのない RescoreParams も同じです。

SearchResult

フィールド型説明
idstring外部ドキュメント ID
scorefloat関連度スコア。再採点した結果では late interaction(MaxSim)のスコア
documentDocumentドキュメントの内容
highlightsmap<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 / JSONINVALID_ARGUMENT不正なリクエストまたはスキーマ、クエリ内の不明なフィールド
インデックス未オープンFAILED_PRECONDITIONCreateIndex の前に RPC が呼び出された場合
インデックスが既に存在ALREADY_EXISTSCreateIndex が 2 回呼び出された場合
未実装UNIMPLEMENTEDまだサポートされていない機能
内部エラーINTERNALI/O、ストレージ、または予期しないエラー