LoginSignup
1
1

More than 3 years have passed since last update.

Solr StreamAPI

Last updated at Posted at 2020-02-06

SolrのStream APIのメモ。
基本的に公式ドキュメントから掻い摘んで持ってきただけです。

/stream Handler

ストリーミングAPIは、SolrCloud用の拡張可能な並列コンピューティングフレームワークです。
/streamというリクエストハンドラにストリーミングリクエストを投げると、タプルをJSONストリームとして返すことができます。
この/streamハンドラはSolr6以降から使用可能です。

通常の検索のように検索結果の上位N件を返すのではなく、全データを返すことを想定して作られています。
このデータを返す部分は/exportハンドラでサポートされています。

ストリーミングリクエストとレスポンス

Streaming Expressions | Apache Solr Reference Guide 6.6の例でいうと

curl --data-urlencode 'expr=search(enron_emails,
                                   q="from:1800flowers*",
                                   fl="from, to",
                                   sort="from asc",
                                   qt="/export")' http://localhost:8983/solr/enron_emails/stream

のようにリクエストをすると以下のようなJSONを1行(1object)ごとに順次返してくれます。

{"result-set":{"docs":[
   {"from":"1800flowers.133139412@s2u2.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers.93690065@s2u2.com","to":"jtholt@ect.enron.com"},
   {"from":"1800flowers.96749439@s2u2.com","to":"alewis@enron.com"},
   {"from":"1800flowers@1800flowers.flonetwork.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"lcampbel@enron.com"},
   {"from":"1800flowers@shop2u.com","to":"ebass@enron.com"},
   {"EOF":true,"RESPONSE_TIME":33}]}
}

ストリーミングでデータが返ってくるといつ全てのデータが返ってきたのかがわからないのでデータの終端には{"EOF":true,"RESPONSE_TIME":33}]}のようなデータが返ってくるようになっています。

このようにデータが順次返ってくるので、返ってくるたびに処理が行え、レスポンス待ちが軽減されます。また、全データをメモリに載せる必要もなくなります。

ストリーミング式

expr: ストリーミング式を指定するために使用されるもの
search(): /streamハンドラに引き渡す関数を指定する。

ストリームは以下のようなライブラリと組み合わせることができる

  • Request/response stream processing
  • Batch stream processing
  • Fast interactive MapReduce
  • Aggregations (Both pushed down faceted and shuffling MapReduce)
  • Parallel relational algebra (distributed joins, intersections, unions, complements)
  • Publish/subscribe messaging
  • Distributed graph traversal
  • Machine learning and parallel iterative model training
  • Anomaly detection
  • Recommendation systems
  • Retrieve and rank services
  • Text classification and feature extraction
  • Streaming NLP
  • Statistical Programming

Streaming Expressions | Apache Solr Reference Guide 7.2

ストリーミング関数はワーカコレクション全体で並列化することができます。

/search

パラメータ名 概要
collection (必須)検索対象のコレクション。上記の例でいうとenron_emails
q (必須)solr indexで実行するクエリ
fl (必須)レスポンスに含めるリスト
sort (必須)ソートの指定
qt 使用するクエリタイプ or リクエストハンドラの指定。レスポンスサイズが大きい場合は/exportを指定する。defaultは/select

DocValuesを使った場合のソートのパフォーマンス - Qiita
Lucene/Solr DocValuesについて調べたことをまとめてみた - YOMON8.NET

/export

数百万件のレコードのsortとexportを処理するために設計されたレスポンスライタ(レスポンスの形式を整形してくれる機能)とランククエリパーサが存在し、それを使って処理することが出来る。

数ミリ秒以内にデータの先頭から送信を開始して、全ての検索結果がsortおよびexportされるまで結果をストリーミングし続けます。

/exportハンドラを使うためには以下の条件があります。

  • ソートするフィールドのdocvaluesがtrue
  • エクスポートする全てのフィールドのdocvaluesがtrue
  • flとsortの指定が必須

Exporting Result Sets | Apache Solr Reference Guide 7.2

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1