rssriverプラグイン触ってみた

## 環境

Elasticsearch 1.4.4
rssriver 1.3.0 (https://github.com/dadoonet/rssriver)
mac osx

## 構築

brewでインストール。

```
brew install elasticsearch14
cd /usr/local/Cellar/elasticsearch14/1.4.4/
bin/plugin --install fr.pilato.elasticsearch.river/rssriver/1.3.0
```

brewでインストールと一緒に入る `elacticsearch`コマンドでも実行できるらしいが、 都度立ち上げるのも面倒なのでデーモン登録。

```
ln -s /usr/local/opt/elasticsearch14/homebrew.mxcl.elasticsearch14.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.elasticsearch14.plist
```

##  フィード登録

基本的にREADMEに従えば問題なし。
※ドキュメント用のindex(今回はfeeds)は自動で作成されるが、analyzer等を指定したい場合は事前に作成すること.

```
$ curl -XPUT 'localhost:9200/_river/feeds/_meta' -d @feeds.json
{"_index":"_river","_type":"feeds","_id":"_meta","_version":1,"created":true}
```

```title:feeds.json
{
    "type": "rss",
    "rss": {
        "raw" : false,
        "feeds": [
            {
                "name": "mogatanpe",
                "url": "http://feedblog.ameba.jp/rss/ameblo/mogatanpe/rss20.xml",
                "update_rate": "1d", -- 更新間隔
                "ignore_ttl": true -- rss2.0仕様のttl属性を無視する場合ははtrue.
            },
            {
                "name": "ayane-pinky",
                "url": "http://feedblog.ameba.jp/rss/ameblo/ayane-pinky/rss20.xml",
                "update_rate": "1d",
                "ignore_ttl": true
            },
            {
                "name": "yumeminemu",
                "url": "http://feedblog.ameba.jp/rss/ameblo/yumeminemu/rss20.xml",
                "update_rate": "1d",
                "ignore_ttl": true
            },
            {
                "name": "eitaso0216",
                "url": "http://feedblog.ameba.jp/rss/ameblo/eitaso0216/rss20.xml",
                "update_rate": "1d",
                "ignore_ttl": true
            },
            {
                "name": "mirin-9",
                "url": "http://feedblog.ameba.jp/rss/ameblo/mirin-9/rss20.xml",
                "update_rate": "1d",
                "ignore_ttl": true
            },
            {
                "name": "risa25d",
                "url": "http://feedblog.ameba.jp/rss/ameblo/risa25d/rss20.xml",
                "update_rate": "1d",
                "ignore_ttl": true
            }
        ]
    }
}
```

クエリに問題がなければ登録時にRSS取得が行われて、ドキュメントが登録される

```
[2015-09-26 19:54:57,088][INFO ][cluster.metadata         ] [Midgard Serpent] [_river] creating index, cause [auto(index api)], shards [1]/[0], mappings [feeds]
[2015-09-26 19:54:57,107][INFO ][cluster.metadata         ] [Midgard Serpent] [_river] update_mapping [feeds] (dynamic)
[2015-09-26 19:54:57,112][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] Starting rss stream
[2015-09-26 19:54:57,118][INFO ][cluster.metadata         ] [Midgard Serpent] [feeds] creating index, cause [api], shards [5]/[0], mappings []
[2015-09-26 19:54:57,162][INFO ][cluster.metadata         ] [Midgard Serpent] [feeds] create_mapping [page]
[2015-09-26 19:54:57,171][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [mogatanpe] for [http://feedblog.ameba.jp/rss/ameblo/mogatanpe/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,171][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [ayane-pinky] for [http://feedblog.ameba.jp/rss/ameblo/ayane-pinky/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,172][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [yumeminemu] for [http://feedblog.ameba.jp/rss/ameblo/yumeminemu/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,172][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [eitaso0216] for [http://feedblog.ameba.jp/rss/ameblo/eitaso0216/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,172][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [mirin-9] for [http://feedblog.ameba.jp/rss/ameblo/mirin-9/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,172][INFO ][river.rss                ] [Midgard Serpent] [rss][feeds] creating rss stream river [risa25d] for [http://feedblog.ameba.jp/rss/ameblo/risa25d/rss20.xml] every [1d] ms
[2015-09-26 19:54:57,178][INFO ][cluster.metadata         ] [Midgard Serpent] [_river] update_mapping [feeds] (dynamic)
```

## データ確認

こんな感じでデータ取れる.

```
$ curl 'http://localhost:9200/feeds/page/_search' -d '{"size": 2}' | jq .
{
  "took": 2,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 63,
    "max_score": 1,
    "hits": [
      {
        "_index": "feeds",
        "_type": "page",
        "_id": "8956f27e-c611-3eda-9b78-d8bf92b6ff8a",
        "_score": 1,
        "_source": {
          "feedname": "risa25d",
          "title": "あした地球がこなごなになっても",
          "author": "",
          "description": "<p>\n リリースしました！最近またブログが書けてなかったな…って、反省してます。誕生日の事とか書きたいこといっぱいあったんだけど、夏の終わりになるにつれて、整理できてないのかなんなのか。時が止まったみたいに私の頭ってか、心の半分は過去に戻ってしまってました。ここに書くのは少し落ち着いたからかもしれない。こういうの書くの嫌だな～とか言うのは、自分を誤魔化してるだけなのも分かってる。あと、大好きなみんなにうまく伝えられなかったり、変な風に悩ませたり、誤解されたりするのが凹むから。だから100%は書けてないと思う。ごめん。それでも見てくれてありがとう。馬鹿かもだけど、相沢の周りのみーーーんなが幸せで、相沢が泣いてたら「バッカだなーw」って笑い飛ばしてくれる世界になったら本音をぜーーーんぶ言える気がするよん。だから、私はみんなを元気に、笑顔にしたい。私の為でもあるのだな～って最近思う。超矛盾の法則の中で生きてる。やっぱバカっつか、ワガママなのかな。「あした地球がこなごなになっても」歌が歌いたいのは、歌が大好きだからなのはもちろんだけど…。大切にしなくてはいけない人が困ってても、悩んでても。そればっかりしてたし、そんな時でもこれしかできなかった。もう、何を失くしても歌い続けなければいけないと思ってるし。歌えなくなったら死ねばいいと思ってるくらいだからです。真剣に世界を幸せにできなきゃいけないって思ってるからです。わけわからぬ感じになりましたが！新曲は明るくて爽やかで、優しさと強さを持った素敵な曲になりました！たくさんの人に聞いてほしいです！はい、さて、あっという間に8月も終わり、大好きな秋。涼しいし、おしゃれもしやすいし、秋のにおいが好き。花や木々が元気に茂って居るのも綺麗だと思うんだけど、枯れ始めた草木の色合いや放つ雰囲気が好き。でも、出来れば雨じゃない日がいいな～。雨しんどいちゃん。先日、FCからりさたんに応募してくれた方限定に短いけどメッセージを送ったよ～。観てくれたみんなありがとうです♡改めましてお誕生日のイベントに応募してくれた皆さん、ほんとにありがとうございます！沢山の方が行きたいと思ってくれたことがすごく嬉しかったです！その反面、来れなかったみんなに寂しい思いをさせてしまってごめんね。歌で伝える瞬間。大好きな時間だし、みんなの気持ちをムダにしない為にも、是非またバンドでのソロのライブができたら嬉しいです♡その時まで観たいなって思って貰えてたらいいなぁ。今年はFC限定のイベント以外に、生誕記念の展示会も出来て嬉しかったです。チケットとかなくても、来たいと思ってくれた人が少しでも相沢の好きなものを感じてくれてたらいいな。なかなか、東京から出れなくて…頑張るだけじゃダメなのも感じる。でも、頑張るしかないのでね。もっとがんばるね。お誕生日の写真は6月頭に撮影してました。今回のテーマは「2.5次元」衣装はアイドロイドなイメージで佳苗ちゃんにお願いしました。Photograph : 川本しおりStyling : 東佳苗(縷縷夢兎)Headphone : 池内啓人(IKEUCHI PRODUCTS)Hair&#38;Make : 光野ひとみいつもお世話になってるみなさんと、初めましてのみなさん！私の頭の中の妄想を、具現化する為に最<a href=\"http://ameblo.jp/risa25d/entry-12072873417.html\">続きをみる</a><p>『著作権保護のため、記事の一部のみ表示されております。』</p>\n\n</p>",
          "link": "http://ameblo.jp/risa25d/entry-12072873417.html",
          "publishedDate": "2015-09-13T17:15:04.000Z",
          "source": null,
          "river": "feeds"
        }
      },
      {
        "_index": "feeds",
        "_type": "page",
        "_id": "3c5ae00c-8d36-3ebe-ac54-9785e2e1445d",
        "_score": 1,
        "_source": {
          "feedname": "eitaso0216",
          "title": "ブローしながらブロッコリーをグーでブロッキングして具にしたい(ノ∀`*)☆〜久ブログ☆〜",
          "author": "",
          "description": "<p>\n たそですヽ(*´∀`*)ノ。おおおおおお久しぶりなの(*´∀`*)！！！ｗｗｗバビュンな彗星よりも突然ミラクルな発言ですが久しぶりに昔の自分のブログを全部の勢いでガン読み返したらTHEブログBOOMが舞い戻って来たので流星の如く急に何か ブ ロ グ を書こうと思うよーーー(*´∀`*)！！！ｗｗｗドッドッドド⊂二二二( ＾ω＾)二二⊃ｗｗｗドドッ(ノ∀`*)☆...えーとそれでまず何から書こうかなとか思っちゃったから(ノ∀`*)ｗｗｗとりあえずちょっとだけみんなからえいたそに聞きたい質問を募らせてくださいヽ(*´∀`*)ノ！ｗ期<a href=\"http://ameblo.jp/eitaso0216/entry-12057135871.html\">続きをみる</a><p>『著作権保護のため、記事の一部のみ表示されております。』</p>\n\n</p>",
          "link": "http://ameblo.jp/eitaso0216/entry-12057135871.html",
          "publishedDate": "2015-08-01T14:42:46.000Z",
          "source": null,
          "river": "feeds"
        }
      }
    ]
  }
}
```

##### 余談

riverプラグインが既に非推奨になっているのを今更知りました。logstash使えって流れなのね...
https://www.elastic.co/blog/deprecating-rivers

 ~~あとアメブロさんのRSSで試してみたのですが、実際になにかに使おうとするとたまに広告入ってくるのが…~~