結果セットのエクスポート
/export
リクエストハンドラを使用すると、特別な ランククエリパーサー と レスポンスライター を使用して、完全にソートされた結果セットを Solr からストリーミング出力できます。これらは、数百万レコードのソートとエクスポートを含むシナリオを処理するために連携するように特別に設計されています。
この機能は、ミリ秒以内にレコードの送信を開始し、結果セット全体がソートおよびエクスポートされるまで結果のストリーミングを続行するストリームソート技術を使用します。
この機能が役立つ場合としては、セッション分析、分散マージ結合、時系列ロールアップ、カーディナリティの高いフィールドの集計、完全に分散されたフィールドの折りたたみ、ソートベースの統計などがあります。
フィールド要件
ソートおよびエクスポートされるすべてのフィールドは、docValues を true
に設定する必要があります。詳細については、ドキュメント値 のセクションを参照してください。
/export リクエストハンドラ
適切な構成の /export
リクエストハンドラは、Solr のすぐに使用できるリクエストハンドラの 1 つです。詳細については、暗黙的リクエストハンドラ を参照してください。
このリクエストハンドラのプロパティは「不変量」として定義されているため、別の時刻(クエリ時など)に渡された他のプロパティによってオーバーライドすることはできません。
結果エクスポートのリクエスト
/export
を使用して、クエリの結果セットをエクスポートするリクエストを行うことができます。
すべてのクエリには sort
パラメータと fl
パラメータを含める必要があります。そうでない場合、クエリはエラーを返します。フィルタクエリもサポートされています。
オプションパラメータ batchSize
は、部分的な結果の内部バッファのサイズを決定します.デフォルト値は`30000`ですが、メモリ使用量を制限するために小さい値を指定するか(パフォーマンスが低下する代わりに)、エクスポートパフォーマンスを向上させるために大きい値を指定することができます(関係は線形ではなく、大きい値にしてもパフォーマンスの向上は比例しません)。
サポートされているレスポンスライターは、json
と javabin
です。下位互換性のために `wt=xsort` も入力としてサポートされていますが、`wt=xsort` は `wt=json` と同じように動作します。デフォルトの出力形式は `json` です。
インデックス付きログデータのエクスポートリクエストの例を次に示します
https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=severity+desc,timestamp+desc&fl=severity,timestamp,msg
ソート基準の指定
sort
プロパティは、エクスポートされた結果セットでドキュメントをソートする方法を定義します。結果は、フィールドタイプが int、long、float、double、string の任意のフィールドでソートできます。ソートフィールドは単一値フィールドである必要があります。
ソートフィールドを追加するほど、エクスポートのパフォーマンスは低下します。ソートフィールドを読み込むための JVM 外の物理メモリが十分にある場合、パフォーマンスはソートフィールドの追加に伴って線形に低下します。そうでない場合はさらに悪化する可能性があります。
フィールドリストの指定
fl
プロパティは、結果セットと共にエクスポートされるフィールドを定義します。ソート可能なフィールドタイプ(int、long、float、double、string、date、boolean)は、フィールドリストで使用できます。フィールドは単一値または複数値です。
フィールドリストにはワイルドカードパターンを使用できます(例:fl=*_i
)。ワイルドカードパターンは、パターンに一致し、エクスポート可能なフィールドのリストに展開されます。フィールド要件を参照してください。
現時点では、スコアの返却はサポートされていません。
ローカルストリーミング式の指定
オプションの expr
プロパティは、ドキュメントが結果セットにエクスポートされる前にローカルで処理できるようにする ストリーム式 を定義します。
式は、/export
ハンドラーからの元の結果を表す特別な input()
ストリームを使用する必要があります。ストリーム式の出力は、/export
ハンドラーの出力になります。このストリーミング式では、&streamLocalOnly=true
フラグが常に設定されます。
/export
ハンドラーでストリーム式を使用すると、返されるドキュメント数のローカルメモリ内削減により、パフォーマンスが大幅に向上する可能性があります。
上位N個の結果のみを返すために top
デコレータを使用する例を次に示します。
https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=timestamp+desc,&fl=timestamp,reporter,severity&expr=top(n=2,input(),sort="timestamp+desc")
(top
デコレータのソート仕様は、ハンドラーパラメータのソート仕様と一致する必要があることに注意してください。)
unique
デコレータを使用する例を次に示します。
https://127.0.0.1:8983/solr/core_name/export?q=my-query&sort=reporter+desc,&fl=reporter&expr=unique(input(),over="reporter")
(over
パラメータは、fl
パラメータで要求されたフィールドのいずれかを使用する必要があることに注意してください。)
分散サポート
分散サポートについては、ストリーミング式 のセクションを参照してください。