Elasticsearchに遊ばれてみた話。
はじめに
最近、かなり今更感があるがElasticsearchを触っている。一昔前いろんな人が便利だ便利だと騒いでいた気がする。完全に出遅れたが今より遅いことはない。僕はElasticsearchに興味があるのだ。
公式サイトを見てみよう。
Elasticsearchは、様々なユースケースを解決する分散型RESTful検索/分析エンジンです。予期した結果や、そうでないものも検索できるようにデータを集めて格納するElastic Stackのコア製品です。
もうこのフレーズだけで理解し難い。RESTfulと検索エンジンはわかる。気になるのは残りだ。分析は検索と一緒に並ぶには随分曖昧な言葉に感じられる。『様々なユースケースを解決する分析エンジン』、かなりふわみ*1がある。
だがしかしそんなElasticsearch、多くの方々が活用している。僕は実は本当に『様々なユースケースを解決する分析エンジン』なのでは無いかと思っている。それはまるで言語仕様として尖った強みは無いけれど、あまりに色々と充実しすぎているpythonのような、そんな感じなのではないかと。きっと僕はElasticsearchを好きになれる。そんな気がしたのだ。
今日はそんな僕が手探りでElasticsearchと仲良くなろうとする、その過程で得られた思い出をいくつか切り取って紹介しようと思う。
前提知識的なアレ
とにかく最初はElassticsearchがなんだかよくわからなかったので、Key-Value Store的に使ってみた、そんな感じだ。 そう、たとえば、python向けIFを使って、
es = Elasticsearch() doc = { 'お名前': 'ぴょりこ', 'やること': 'ブログを書く' } res = es.index(index="test-index1", doc_type='pyokopyoko', body=doc)
とやったら、何やら書き込めて、
res = es.search(index="test-index1", body={"query": {"match": { 'お名前': 'ぴょりこ'}}})
で、マッチしたものを引っ張り出せる、程度の雑な認識である。そんな前提で色々トラブった話をしよう。
Elasticsearchとの思い出
型を意識しろ
Elasticsearchはデータがブチこまれたとき、その入力から勝手に型を推定してくれる(もちろん自分で定義もできる)。dateとかfloatとか色々。 ただし、同じkeyだったら同じ型でなきゃいけないという縛りがある。
まぁそりゃそうかぁという感じなのだけれど、こちらはガバガバpython使いなのでたとえば以下のようなことをしてエラーを吐かせた。
docs =[ { 'お名前': 'ぴょりこ', '身長': '143.3' }, { 'お名前': 'test', '身長': '0' } ] for doc in docs: res = es.index(index="test-index2", doc_type='pyokopyoko', body=doc)
一個目の身長で型がfloatと推定されたあと、二個目でintをブチこもうとしてるので怒られる。testさんの身長を0でなく0.0にすると怒られない。if文で例外に0を返す的なやつを書いてたら(これはコレで明示的にNoneとかにすべきケースな気がするが。)、これに引っかかって何が起こってるのかわからなくなり悩んだ。
同様のやらかしとして、たまに空欄が存在する日付データを食わせていたとき、通常はdate型だが空欄だけstringと解釈されて同じように怒られた。このときは、Noneはdate型として受け入れてくれるので、空欄をNoneに置換してから食わせた。
python書いていて普段自分がいかに型を意識していなかったかがわかる。
汎用key-value storeだと思って深いやつぶち込んだ
深い階層のjson的なデータの書き込みをしてみた。
{ 'お名前': 'ぴょこ', {'2018/12/1': ['','',...] '2018/12/1': ['','',...], ... } }
みたいな階層が深かったりリストが混じってて長さが可変だったりするやつ。件数を増やしていくにつれめちゃめちゃ重くなって150件程度でサービスが死んだので*2、こういう使い方するんじゃないんだぁと思いました(こなみかん)。
というか各key(この呼び方が正しいかわからない)ごとに型定義したりしてるんだから、複雑な構造にしたらその分このあたりの手間も増えそうだしそれはまぁそうかぁという感じ。
せっかく検索が早いのだから、一箇所に色々集めて複雑な構造にせず、できるだけ浅い階層のものでインデックスを構成して、複数のインデックスからサーチして横断的にデータを眺めるみたいな使い方をするものなのだろうなぁという気持ちになりました。
そのへんの情報が古くて困る
Elasticsearch用語であるところのindexとtype、検索すればわかると思うんだけれどみんなSQLでいうとindexがDBでtypeがテーブルとか言ってる。
公式曰くtypeは廃止される予定で、
Initially, we spoke about an “index” being similar to a “database” in an SQL database, and a “type” being equivalent to a “table”.
This was a bad analogy that led to incorrect assumptions.
まぁそういうこともある。index設計のベストプラクティスはまだよくわからない。雰囲気でElasticsearchをやっている。
matchはゆるふわ検索
最初の頃matchは完全一致だと思ってたんだけど、そんなことはなかった。
docs =[ { 'お名前': 'ぴょりこ', '機材': 'SC-88' }, { 'お名前': 'まおん', '機材': 'SC-55' }, { 'お名前': 'れがしーちゃん', '機材': 'SD-90' } ] for doc in docs: res = es.index(index="test-index3", doc_type='pyokopyoko', body=doc)
とデータぶち込んで、
res = es.search(index="test-index3", body={"query": {"match": { '機材': 'SC-88'}}})
とクエリを投げると何故かSC-55を持ってるまおんも返ってくる。どうも単純な完全一致ではなく、”-”で単語が区切りられてると解釈して、多分 or的に区切られた単語にマッチするものを見つけてくるっぽい(要確認)。
というわけでSCがついてるものを返してくれる感じの挙動になる。多分スペース区切りとかでも多分そんな感じに振る舞うんじゃないかな(要確認)。
matchをmatch_phraseなどにすると所望の挙動(ぴょりこだけ返ってくる)になってくれる。
まとめ
Elasticseachと仲良くなるために、これまで手探りで進めてきた過程で生まれた思い出(????)をいくつか切り取って紹介した。 僕とElasticsearchとの関係はまだまだ始まったばかり。もっともっとElasticsearchを知ってどんどん仲良くなっていこうと思う。
・・・とりあえず入門書位読んでみようかなと思う。
こねくてっどもーたーさいくる
この記事は、カレーのち ぴょこりんクラスタ Advent Calendar 2018のために書きました。
この記事を参考にしたり真似たりすることにより、あなたに諸々の不利益が生じたとしても僕は知りません。
(一応公道を走る乗り物ネタなので、IoTってたいへん。)
今日ご紹介のおもちゃ
これ知ってます?自動車に詳しい方なんかだと知ってるかもしれないですね。
何やら書いてあるOBD2って文字はOn-Board Diagnostics (2nd generation)の略で、自動車に組み込まれた諸々のマイコンと通信するための規格。 名前の通り、自動車のメンテ、診断のためのもので、これに準拠した専用の器機のコネクタをダッシュボード下に隠されたアレに挿して使う感じです。
話を戻すと、画像のコイツはそのダッシュボード下のアレに差し込んで、bluetooth経由でスマホなどを用いてマイコンと通信しちゃおう系アイテムです。Amazonとかで買えます。1000円前後で買えます。
- エラーコードの確認
- センサデータの取得
などが出来たりします。センサーデータ取りたいよね。
バイクで取れるのか
『バイクにもこの端子ついてるのかな、前乗ってたバイクは隅から隅まで眺めたけどそれっぽいの無かったよなぁ』なんて思ったりするわけです。
豆知識1『バイクのOBD搭載義務化』
平成28年度の二輪車排ガス規制(新型車は2016年10月1日から、継続生産車に関しては2017年9月1日から適用)により、バイクのOBD搭載が義務化。 www.bikejin.jp そういえばこのちょっと前くらいの時期、めっちゃ生産終了車が出てた気がします。 一昨年このブログでFTRが生産終了したことに言及しましたが、まぁつまりそういうことですね。
ということは・・・僕が今乗っているバイク(yzf-r3)は2018年2月に納車した新車なので、高い確度でOBD的なサムシングが搭載されていそうです。
確認してみる
こんな端子がありました。車のOBDⅡとは明らかに端子が違う。
豆知識2『バイク向けOBDの端子は各社結構違う』
この記事で言及されてるEURO4はほぼ平成28年度排ガス規制と読み替えても差し支えない。
うちのバイクから出てる端子がOBDかどうかよくわからんけれど、とりあえずYAMAHA向けの変換ケーブルっぽいものを購入。セカイモンでようやく見つけました・・・。 到着まで随分待たされた上に関税とか諸々で6000円くらい飛んだ気がする。
じゃーん!
写真撮り忘れましたがちゃんと[ちょっと前の写真に写ってるバイクから生えてるやつ]⇔[6000円(上の写真)]⇔[青いやつ(最初の写真)]とつながりました。ハードウェアの準備はばっちりです!
データ触ってみる
スマホとbluetooth接続、あとはtorqueというソフトがデータ取得からcsv出力までやってくれる。バックグラウンドだとサボるっぽくて、スマホをナビとして使うとログが取れなくて悲しい。常用するなら専用にandroid端末用意した方が良いかなぁという気持ち。
OBDⅡで色々なデータが取れるのだけれど、PID (Parameter IDs) を指定してあげることによって、取るものを指定する。torqueは課金するとPIDの指定もできるようになる。各社秘密のPIDもあるのかもしれないけれど、基本は標準的なPIDが定義されてるっぽい。
可視化の例
ほんとはバッテリーの電圧とかエンジン温度とか見たさがあったんだけど、デフォルトでは取ってなかった。一体何をデフォルトで取っているのか。
デフォルト何も取ってなくて草。
課金してPIDs指定して色々とれるようにしたんだけど外が寒くて追実験する気力ががが。 (スマホから取得された)GPS情報とかGPSから算出された速度とかG(3軸)が取れていたのでとりあえず可視化。googlemapにアレしてスクショ取ったけどこれ僕のおうちわかっちゃうやんってことで却下。頭とお尻削ると良いのかな。
横軸が時間(秒)縦軸がGの値、速度が0でない(=走っている)ところを背景灰色にした。
G(z)はいい具合に重力加速度っぽいし、G(x)、G(z)もいい具合にバイクに取り付けられた僕のスマホの傾き具合により加わった重力って感じだ。torque経由したものの全然OBD2経由のデータ取ってないやん全部スマホ由来やんって虚無になってきたけどまぁいいや。なんとなく停止前にG(y)が減少する傾向にある気がするのはブレーキによるものかな。
今後やりたいこと
1. ちゃんとPIDを指定してデータ取りたい。
- バッテリー電圧を見て、どれくらいでフル充電になるのか、どれくらい放置するとバッテリーあがりするのか定量評価したい
- エンジンの温度の変化とか、季節変動等含めてそのあたりもみてみたい
- オイル交換時期の目安がわかったりする位になると嬉しい
2. アップロード機能とかもあるので収集を自動化したい。
- あがったら勝手にグラフにしてtwitterかchatbotに投げる的な
3. ツーリングのサマリーをつくりたい
- 位置、時間などを突き合わせてこの時間ここで写真とったとかツイをしたとか集約させてニヤニヤしたい
そんな感じで。以上。
『けものたちがどったんばったん大騒ぎ』の話をします。
この記事は、カレーのち ぴょこりんクラスタ Advent Calendar 2018のために書きました。
はじめに
ぴょこりんクラスタAdvent Calendar、主催(主催?)のぴょりこです。
今年もぴょこりんクラスタアドベントカレンダーの季節がやってきました。既に1日目にビスコ先生がスロットル全開、ぶっちぎり記事を書いてくれてます。
あまりのぶっちぎりっぷりにまた各位に敷居が高いって怒られちゃう・・・*1。
というわけで、そんな緊張感溢れる2日目にアイスブレイク的な記事を書く。そういう営みに僕は価値を感じるのです。
*1:本当によくこれ言われるんだけど全然敷居高くないんですよね・・・。単に断るのにちょうどよいフレーズなのでみんなそう言うのです。
またまた!ぴょこりんクラスタ Advent Calendar 2017総括
この記事は、またまた!ぴょこりんクラスタ Advent Calendar 2017のために書きました。
はじめに
またまた!ぴょこりんクラスタ Advent Calendar 2017、お疲れさまでした。総括記事、本当は動画にして、『はいはーいバーチャルユーチューバの(以下略』みたいなことしたかったのですが、疲れたのでなかったことにしました(VOICEROIDも買った)。
だってクリスマスイブだよ、他にやること色々あるでしょ。ちなみに僕はファミマ巡りをしたり、怪文章を書いたり充実した日を過ごした。非リア諸君とは違うのだよ。
というわけで早速記事を一つ一つ見ていこうかね。
- はじめに
- 記事一覧
- 2048p - お菓子食べる部
- いつもより更に雑に今年を振り返ります。 - ぴょこりんブログ
- 今年放送されたあのアニメについて語ります。 - ぴょこりんブログ
- 齧歯類は可愛い。 - ぴょこりんブログ
- 犬との生活 その1 - お菓子食べる部
- タイトルでネタばらしをしない - 七転八転
- 立ち食いステーキはフィットネスとともに。 - ぴょこりんブログ
- あいまいユートピア - 七転八転
- 犬との生活 その2 - お菓子食べる部
- 僕は友達が少ない - 七転八転
- 晩御飯コラボで圧倒的成長☆ミ - ぴょこりんブログ
- 今年行った動物園について書きます。 - ぴょこりんブログ
- 今年買ってよかったもの - お菓子食べる部
- 『うちの子』が欲しい。 - ぴょこりんブログ
- termboxで出せる色を調べるツール - お菓子食べる部
- 今年飲んだおいしいお茶 - お菓子食べる部
- 典型的アルゴリズムについて(1) - 七転八転
- ハロースマートエーアイ。 - ぴょこりんブログ
- リッツパーティをセルフホストした話 - お菓子食べる部
- ぼうけんしようよ - 七転八転
- Google SpreadsheetにPythonから書き込んでみる - お菓子食べる部
- ほっかいどうはでっかいどう - 七転八転
- ゴルフを始めるときに買ったもの - お菓子食べる部
- pyokkorin feat. Kagamine Rin 2017 by capp365 | Free Listening on SoundCloud
- 総括
- まとめ
みんなちゃんと書いてえらい。
記事一覧
2048p - お菓子食べる部
独自ルールのP、便利さを全く感じることなく死んでしまった。 このPをぴょっこりんと呼び、『ぴょっこりんクソうぜぇ』とかやると盛り上がること間違いなしですね!
いつもより更に雑に今年を振り返ります。 - ぴょこりんブログ
capp365.hateblo.jp アイスブレイククソ記事枠です。これを読んだフォロワー数名が自分でも試しているのを見て、あぁ簡単に再現できるネタというのは良いなぁという謎の学びがありました。
今年放送されたあのアニメについて語ります。 - ぴょこりんブログ
capp365.hateblo.jp これ、ブルーレイボックス買うか悩んでたんですが、アドベントカレンダーのネタにするという条件付採択という形をとりました。まぁ買って良かった気がしている。
齧歯類は可愛い。 - ぴょこりんブログ
capp365.hateblo.jp かわいい。
犬との生活 その1 - お菓子食べる部
動物との共存は部屋の掃除をしっかりするか諦めるかの2択なのでぜひ頑張ってほしい。 あと可愛い犬の画像をあげ忘れてませんか?????
タイトルでネタばらしをしない - 七転八転
darumap.hatenablog.com 細かいんですが、PI(or l?)って書いてあったんですが、あれは何でしょう。 ぴょっこりんにはIもLもつかないんだなぁ。
立ち食いステーキはフィットネスとともに。 - ぴょこりんブログ
google mapのアレをちょっと触ってみようと思ってちゃちゃっとやりました。 ちなみにスクレイピングをやろうとするたびに自分の古いアドベントカレンダーの記事眺めています。 自分がやったことだし、やりたいことも自分にはわかりやすいので案外悪くない。
あいまいユートピア - 七転八転
darumap.hatenablog.com 微熱空間はとてもいいですよ。ちなみに楽園を読んだはやだるまさんは恋愛欲を刺激されたのでしょうか?
犬との生活 その2 - お菓子食べる部
nbisco.hatenablog.com うちの実家にいる猫、長い間実家に暮らしてるものの、未だに妹にしかなつかないですね。 犬もそうだとは断言できないけれど、まぁ気長に、楽しく暮らしていければいいのかなと思います。
僕は友達が少ない - 七転八転
darumap.hatenablog.com この記事を読んだ時の最初の印象は『何がチケット・トゥ・ライド アメリカだお前がインドに行くんだよ』です。
晩御飯コラボで圧倒的成長☆ミ - ぴょこりんブログ
capp365.hateblo.jp オープンに良い意見を取り込み、迅速にプロトタイプを作成、成果を外に問う。 完全にイノベーションって感じですね(てきとう
本当は今年買って良かったものを並べる予定だったんだけど、ビスコ先生と被るものもありそうだったし(ドラム型洗濯機とか)、まぁこれでよかったかなぁという感じ。
今年行った動物園について書きます。 - ぴょこりんブログ
突然帰ってこいって言ってきた弊社が全部悪い。
今年買ってよかったもの - お菓子食べる部
ウェルカムトゥようこそ、エルゴノミクスキーボードへ。マイクロソフトはUS配列も日本で扱ってほしい。 まぁ僕は向こうで買ったやつ持ってるからいいんですけどね!(謎の自慢
『うちの子』が欲しい。 - ぴょこりんブログ
本当はこの子にバーチャルユーチューバで総括やらせたくて、その伏線だった。 いつものアイコンでバーチャルユーチューバをやらせる方向にならないのは、夏野こおりのVOICEROIDが存在しないから。
termboxで出せる色を調べるツール - お菓子食べる部
nbisco.hatenablog.com これはあれだよね、1日目の2048p、これも取り入れたかったんだけどめんどくさくなったり仕事でばたばたしたりで結局やらなかったとかそういうやつなんだよねって想像してしまう。
今年飲んだおいしいお茶 - お菓子食べる部
コーヒーと緑茶と水道水がぶ飲みするだけのクソザコなので参考にさせていただきます。
典型的アルゴリズムについて(1) - 七転八転
darumap.hatenablog.com 競プロネタ、ありそうでなかったからどんどんやってくれていいんだよ!!!! 期待しています。
ハロースマートエーアイ。 - ぴょこりんブログ
capp365.hateblo.jp もはや本当は何を書こうとしていたのか覚えてない。これを機にgoogle home mini使うようになったんだけどまぁ便利で良い。具体的には布団から出ず、目を開けることなく目覚ましのセットと時間の確認が出来るのが良い。
リッツパーティをセルフホストした話 - お菓子食べる部
リッツパーティってイケイケなアプリを自鯖にデプロイした話かと思ったら全然違った。 お菓子が偶数個だったので誰かとご一緒においしくいただいたのでしょうか?
ぼうけんしようよ - 七転八転
darumap.hatenablog.com ave;new脳なので、大槍葦人さんのイラストを見ると聖剣のフェアリースを思い出します。 あと、やっぱりファンならそろそろドリームキャストの完全動作品とか保守手段とかを確保する時期だと思うんですよね。
Google SpreadsheetにPythonから書き込んでみる - お菓子食べる部
nbisco.hatenablog.com どんな感じでこねくり回すのかも気になるので自動化できた暁にはその辺の話も当たり障りのない範囲で聞かせてくれるといいなぁと思いました。
ほっかいどうはでっかいどう - 七転八転
darumap.hatenablog.com クソみたいにマイルがたまっているので僕も温かくなったら北海道へ行こう・・・。
ゴルフを始めるときに買ったもの - お菓子食べる部
ゴルフ、お酒と一緒で労とつよいつながりがあり、若者から偏見を持たれてるスポーツって感じがある。 やってる人、みんな労関係なく案外普通に楽しそうなんだよね。
pyokkorin feat. Kagamine Rin 2017 by capp365 | Free Listening on SoundCloud
何か最近SONARの調子が悪くて(これのプロジェクトファイルでコンソールビューが開けなくなったり、あと各種パラメータがマウス操作中ふっとんだり)、ミックス以降のやる気が壊滅的になって壊滅的になった。曲の雰囲気自体は割と好きなのでちょっと残念。年末年始はOSの入れ直しからのスタート予定です。
総括
違った。この記事はアドベントカレンダーと関係ないです。
まとめ
個人的な反省は仕込みが出来なかったことと、いつも通り人望チャレンジ失敗したことです。前者は弊社が悪いので来年は悪くないことを祈るばかりです。後者はみなさん、来年も煽られ駆動でAC立てると思うんでよろしくお願いいたします。
というわけでめりーくりすますあんどはっぴーにゅうにゃあ!重ねてお疲れさまでした!おしまい!!!
舞台『けものフレンズ』の実写という壁。
はじめに
クリスマスイブなので舞台『けものフレンズ』の話をします。
『いやいや、アニメや漫画、ライトノベルといった2次元コンテンツの実写はもうこりごりなんですよ』って各位、わかる。僕も昔『半分の月がのぼる空』が好きで、この作品だけで実写ドラマ化、実写映画化とオーバーキル食らった過去がある。もし今あの作品がアニメ映画化したら、まだまだかなり需要あると思うし、新たな需要さえ生むと思うんだけれど、たぶん作者様はもう引退して海外で余生を過ごしたりしてるだろうし、権利的に無理なんだろうなって・・・。
いや、話がそれてしまった。とにかく僕もそっち側なんだ。悪いスライムでもセルリアンでもない。だからもうちょっとだけ話を聞いてほしい。劇場とか舞台とか、実写関連のキーワードが来ると、もうその時点でダメって感じになっちゃうよね。今日はそういう話をする。
続きを読むハロースマートエーアイ。
この記事は、またまた!ぴょこりんクラスタ Advent Calendar 2017のために書きました。
はじめに
最近ちょいちょい話題にあがりますよね、エーアイスピーカー概念。実は僕も持ってるんですよ。
google廃課金ユーザだったもので(?????)、無料でもらえるクーポンを持ってたんですね。まぁ無料ならもらっとくかーって放置していたんですが、アドベントカレンダーに書くネタに困ったのでちょっとだけ遊んでもらうことにします。
続きを読む