クライアント側の処理が多すぎる場合、ElasticSearch の map-reduce に相当するものは何ですか? クライアントがデータを受け取ったときに出力するデータを減らすことができるように、「ストリーミング」のようなものはありますか?
クライアント側で結合または複雑なフィルタリングを行う必要があると仮定します。これは、map-reduce スキームがないとメモリに収まらない可能性があるタイプです。応答を長時間待つことは気にしませんが、マシン (クライアントおよび/またはサーバー) をクラッシュさせたくありません。
これについてどうすればよいですか?
例、マッピング:
{"book":{"properties":{
"title":{"type":"string", "index":"analyzed"},
"author":{"type":"string", "index":"analyzed"},
}
{"character":{"properties":{
"book_id":{"type":"string", "index":"not_analyzed"},
"name":{"type":"string", "index":"analyzed"},
"age":{"type":"integer"},
"catch-phrase":{"type":"string", "index":"analyzed"},
}
N より長くないキャッチフレーズを持つ少なくとも M 文字を含むすべての本を見つけたいとします (N はクライアント側で提供されるパラメーターです)。
そうなるだろうget_books_with_short_phrases(M,N)
もちろん、「句の長さ」などのフィールドを「文字」タイプに追加することもできますが、「キャッチフレーズ」の処理は常に変化する可能性があると仮定しましょう。
<book>-<character,len(phrase)>
「キャラクター」と「本」をクライアントにストリーミングし、各クライアントを調べてキー値を出力し、さらにそれを削減したいと思います<book>-<num_of_chars_with_short_phrase>
すべてのドキュメントをクライアント メモリにロードすると、大惨事になる可能性があります。クライアントが各本を処理し、それを ak,v に縮小する場合は、より良いかもしれません。
私はそれについて間違っていますか?
ソリューションは何らかの方法でサーバー上でスクリプトを実行しているので、map-reduce を実行しますか?