Apache SolrFluentd から更新したいなと思ったのですが, 既存の btigit/fluent-plugin-solr は Solr の field が固定されていて(https://github.com/btigit/fluent-plugin-solr/blob/d3b4e3baa6eb9951493ff22627d57497c929a6a3/lib/fluent/plugin/out_solr.rb#L44), 汎用性がありません.

そこで, uken/fluent-plugin-elasticsearch をベースにして haruyama/fluent-plugin-out-solr を作りました.

install すると plugin の type として solr と solr_time_sliced が利用できます. solr のほうは単一の core への更新, solr_time_sliced は time で分割した core の更新が行なえます.

設定例は haruyama/fluent-plugin-out-solr にあります.

まだ手元でも十分にはテストしていませんのでご注意ください.

その他にも注意点があります.

  • Elasticsearch とは異なり, core や field は Solr 側で先に定義しておく必要があります. field は dynamicField でももちろん構いません.
  • uniqueKey を明示的に含めないならば, UniqueKey - Solr Wiki の UUID techniques を利用する必要があります.
  • 現在のところ明示的に commit, softCommit をしません. autoCommit, autoSoftCommit の設定が必要です.
    • Solr が落ちた場合には 更新されたはずのデータが commit されておらず再起動後更新されていないということが起こりえます. これはこのプラグインに限らず softCommit を利用するならば考慮しなければいけない事態です.
    • それほど大量の更新がされないシステムのために明示的な commit をする設定は追加してもよいかもしれないですね. あとで追加しようと思います. softCommit は autoSoftCommit でやればいいと思うので入れません. (2014-01-02 11:56追記: version 0.0.5 で commit true を指定すれば 明示的に commit するようにしました.)
  • Solr の *date fieldType が "YYYY-MM-DDTHH:MM:SSZ" で指定されていないといけないので, デフォルトでは localtime をこの形式で入れます. "utc" が指定されているならば UTC で入れます.