肥後橋グルメ探訪 Vol.1
こんにちは。LQヒロシです。
弊社オフィスのある肥後橋周辺は靭公園を中心においしいお店が沢山あります。これまで弊社ブログでそういう趣向の記事がなかったな、良いお店があるのに紹介しないってもったいないなと思い立ち、今回はグルメ記事を書こうと至った運びであります。(ネタに困ったわけではありません)
KiBar+CAFE (ケーアイバープラスカフェ)
おすすめの座席は窓に面した8席のカウンター。眺めも上々でゆったりした気持ちでランチがいただけます。
こんにちは。LQヒロシです。
弊社オフィスのある肥後橋周辺は靭公園を中心においしいお店が沢山あります。これまで弊社ブログでそういう趣向の記事がなかったな、良いお店があるのに紹介しないってもったいないなと思い立ち、今回はグルメ記事を書こうと至った運びであります。(ネタに困ったわけではありません)
おすすめの座席は窓に面した8席のカウンター。眺めも上々でゆったりした気持ちでランチがいただけます。
こんにちわ。
リエです。
つい先日親知らずを抜いてきました。
下の親知らずは数年前に両方抜いたので今回は上の親知らずです。
右が生えてきて痛かったので抜いたのですが、抜歯後は腫れも痛みもマシでした。でも痛み止めは必須です。(飲まないと寝れなかった)
下は完全埋没歯で抜歯後はめちゃくちゃ腫れて、痛みも痛み止め効かないくらい痛かったのであの時に比べると我慢できるというレベルです。
私は全然虫歯がなくて、レジン法で治療した歯が2本だけというのが唯一の自慢だったりします。もちろん歯周病にもなっていません。
甘い物は大好きですが、虫歯リスクが上がるからダラダラ食いは絶対しないですし飴も基本的には食べません。(のど飴はノンシュガーのものを選ぶ)
という感じで日々予防に努めております。このまま健康な歯を維持して目指せ8020!
という感じで日々の予防プラス定期的なクリーニングと健診はめっちゃ大事なので、行ってない方はぜひ行くことをおすすめします。なんか歯医者さんの回し者みたいになった。
〜余談〜
この前下の奥歯が痛くなって焦って歯医者さんへ行ったのですが、硬いものの食べ過ぎが原因と言われました/(^o^)\思い返してみると前日ナッツをめっちゃ食べてたわ。
いよいよ花粉症の季節がやってきますね。
> 花粉さん、今年は注射治療しますがお手柔らかにお願いしますね。
マエダです。
さてこのタイトルなんなのかとご説明させていただきますと、みんな大好きLaravelのBladeテンプレートにControllerから渡された変数を利用して、vuejsの変数名を生成して、vuejsの変数を表示したい!
僕の日本語がヘンくてわかりませんね。(変)
こちら利用したことある方はおなじみの記述方法ですね。
<span>
{{ $name }}
</span>
Laravel利用者はおなじみだと思いますが、BladeとVue.jsの波括弧とで構文エラーとなるのを先頭に「@」を付けることで回避する記述方法を利用します。
<span>
@{{ name }}
</span>
上記を踏まえまして、これってどうかなーってBladeテンプレートに書くと・・・
<span>
@{{ users.{{ $user_id }}.name }}
</span>
「[Vue warn]: Error compiling template」
波括弧の閉じるがどっちやねん!って怒られてしまいますね。。。
そこでの回避方法として、
<span>
@php echo("{{ users.{$user_id}.name }}") @endphp
</span>
急に波括弧を使わない!という選択。( ー`дー´)キリッ
そもそもそんなPHPとJavaScriptどっちつかずの設計にするなよとかのツッコミは受け付けません。
こうやったらどうですか?という優しいツッコミだけお願いします。
以上、vuejsに触れてみようのコーナーでした。
\\優しくツッコミをいれてくれる仲間を募集中です!!//
vuejsビギナーの僕がよくわからない利用方法を実験しているときに優しくツッコミいれてくれるそこのあなた。
以下ページよりご応募お待ちしております。
https://splout.co.jp/recruit/
SolrCloudのエイリアス機能には大きく分けて Standard Aliases と Routed Aliases があります。基本的な機能はどちらも共通で、Routed Aliases には特定のフィールドの値に応じて特定のコレクションを対象として指定できるという特徴があります。
この記事では、Routed Aliases の中の Time Routed Aliases を採り上げます。
Time Routed Aliases を作るときの基本的なリクエストは以下のようなものです。
$ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATEALIAS&name=timedata&router.start=NOW/DAY&router.field=date&router.name=time&router.interval=%2B1DAY&router.maxFutureMs=3600000&router.autoDeleteAge=/DAY-90DAYS&create-collection.collection.configName=aliasConfigSet&create-collection.numShards=1'
指定されているパラメータの説明
たとえば2019年12月25日に上に示したリクエストを実行したとすると、以下のような運用になります。
上述の通り、最新のコレクションが timedata_2019-12-25 であるときに12月26日のデータを追加しようとすると、新しく timedata_2019-12-26 が作られます。 新しいコレクションの作成には数秒を要し、その間 timedata_2019-12-26 への更新処理はブロックされます。
秒あたりのデータ数が多く、このブロック発生が許容できない場合には、CREATEALIAS アクションのオプションとして router.preemptiveCreateMath を指定できます。ここで例えば60分を指定しておくと、12月25日の23:00のデータを処理した時点で先に timedata_2019-12-26 を非同期に作成しておくことができます。
Time Routed Aliases は以下の特徴を持つ Routed Aliases です。
時間的に連続するログデータやセンサの計測データなどを扱うのに向いています。
SolrCloudにはコレクションにエイリアスを設定する機能があります。
このエイリアスが役に立つ場面として、リファレンスでは以下の3つが挙げられています。
・新しく作った、再生成したインデックスをダウンタイム無しで既存のものと差し替える
・コレクション名の変更がクライアントプラグラムに影響を与えないようにする
・同じスキーマの複数のコレクションに1回だけクエリを発行する
1つめと2つめについては経験がありますが、3つめの複数のコレクションを対象にエイリアスを設定するパターンは使ったことは無かったので、その挙動等を調べてみました。
まずalias_test1とalias_test2の2つのコレクションを作成してエイリアスalias_testを設定。
$ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATE&name=alias_test1&numShards=1&replicationFactor=1&wt=json' $ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATE&name=alias_test2&numShards=1&replicationFactor=1&wt=json' $ curl -s 'http://localhost:8983/solr/admin/collections?action=CREATEALIAS&name=alias_test&collections=alias_test1,alias_test2'
エイリアスを確認。
curl -s 'http://localhost:8983/solr/admin/collections?action=CLUSTERSTATUS' | jq .cluster.aliases { "alias_test1": "alias_test1", "alias_test2": "alias_test2", "alias_test": "alias_test1,alias_test2" }
コレクションではなくエイリアスを指定してフィールドを追加してみます。
$ cat add_field.json { "add-field":{ "name":"date", "type":"pdate", "stored":true }, "add-field":{ "name":"body", "type":"string", "stored":true } } $ curl -s -X POST -H 'Content-type:application/json' -d @add_field.json 'http://localhost:8983/solr/alias_test/schema'
各コレクションのスキーマを確認。
$ curl -s 'http://localhost:8983/solr/alias_test1/schema/fields?omitHeader=true' { "fields":[ { "name":"_root_", "type":"string", "docValues":false, "indexed":true, "stored":false}, { "name":"_text_", "type":"text_general", "multiValued":true, "indexed":true, "stored":false}, { "name":"_version_", "type":"plong", "indexed":false, "stored":false}, { "name":"body", "type":"string", "stored":true}, { "name":"date", "type":"pdate", "stored":true}, { "name":"id", "type":"string", "multiValued":false, "indexed":true, "required":true, "stored":true}] $ curl -s 'http://localhost:8983/solr/alias_test2/schema/fields?omitHeader=true' { "fields":[{ "name":"_root_", "type":"string", "docValues":false, "indexed":true, "stored":false}, { "name":"_text_", "type":"text_general", "multiValued":true, "indexed":true, "stored":false}, { "name":"_version_", "type":"plong", "indexed":false, "stored":false}, { "name":"id", "type":"string", "multiValued":false, "indexed":true, "required":true, "stored":true}]
dataフィールドとbodyフィールドが追加されたのはalias_test1の方だけでした。alias_test2にはコレクション名を指定してフィールドを追加しておきます。
$ curl -s -X POST -H 'Content-type:application/json' -d @add_field.json 'http://localhost:8983/solr/alias_test2/schema' $ curl -s 'http://localhost:8983/solr/alias_test2/schema/fields?omitHeader=true' { "fields":[{ "name":"_root_", "type":"string", "docValues":false, "indexed":true, "stored":false}, { "name":"_text_", "type":"text_general", "multiValued":true, "indexed":true, "stored":false}, { "name":"_version_", "type":"plong", "indexed":false, "stored":false}, { "name":"id", "type":"string", "multiValued":false, "indexed":true, "required":true, "stored":true}, { "name":"body", "type":"string", "stored":true}, { "name":"date", "type":"pdate", "stored":true}]
エイリアス alias_test を指定してデータを投入してみます。
$ cat data.json [ {"id":"1", "date":"2019-01-01T00:00:00Z", "body":"body1" } ] $ curl -s -X POST -H 'Content-type:application/json' -d @data.json 'http://localhost:8983/solr/alias_test/update/json/docs?commit=true'
それぞれのコレクションの内容を確認。
$ curl -s 'http://localhost:8983/solr/alias_test1/select?q=*%3A*&omitHeader=true' { "response":{"numFound":1,"start":0,"docs":[ { "id":"1", "date":"2019-01-01T00:00:00Z", "body":"body1", "_version_":1653627228838166528}] }} $ curl -s 'http://localhost:8983/solr/alias_test2/select?q=*%3A*&omitHeader=true' { "response":{"numFound":0,"start":0,"docs":[] }}
やはりalias_test1の方だけ更新されている。
コレクションalias_test2を指定して別のデータを投入しておきます。
$ cat data2.json [ {"id":"2", "date":"2019-01-02T00:00:00Z", "body":"body2" } ] $ curl -s -X POST -H 'Content-type:application/json' -d @data2.json 'http://localhost:8983/solr/alias_test2/update/json/docs?commit=true' $ curl -s 'http://localhost:8983/solr/alias_test2/select?q=*%3A*&omitHeader=true' { "response":{"numFound":1,"start":0,"docs":[ { "id":"2", "date":"2019-01-02T00:00:00Z", "body":"body2", "_version_":1653898674683510784}] }}
エイリアスを指定して検索。
$ curl -s 'http://localhost:8983/solr/alias_test/select?q=*%3A*&omitHeader=true' { "response":{"numFound":2,"start":0,"maxScore":1.0,"docs":[ { "id":"1", "date":"2019-01-01T00:00:00Z", "body":"body1", "_version_":1653627228838166528}, { "id":"2", "date":"2019-01-02T00:00:00Z", "body":"body2", "_version_":1653898674683510784}] }}
コレクション alias_test1 と alias_test2 の結果が統合されていることが分かります。
複数のコレクションを対象にしたエイリアスの挙動を探ってみました。
検索では1回のリクエストで統一的に結果を得ることができます。
更新の場合は最初に指定されたコレクションがUPDATEリクエストを処理するようになっており、更新先を指定したい場合にはコレクション名を使う必要があります。
同じスキーマのコレクションを複数に分けたい使い方というのは、ログ等の時系列のデータが典型例です。実はSolrではこのような使い方に便利なRouted Aliasという機能が用意されています。Routed Aliasの詳細については別の機会に採り上げたいと思います。