[Solr] Lucene8.1に同梱されるようになったLukeを使う

はじめに

LukeはLucene用のインデックスブラウザです。SolrはLuceneのインデックスを利用しているので、SolrのインデックスをLukeでブラウズすることができます。
Lukeは従来Luceneから見るとサードパーティのソフトウェアであったので、その時々のLuceneのバージョンに合わせてコンパイルが必要で、さらに近年ではLukeのメンテナンスが追いついていない部分もあり、実際に使うにはいろいろ手間が必要な状態になっていました。

そのLukeがLucene 8.1(Solr 8.1)でLuceneのモジュールとして取り込まれました。 この長い長いチケットを見れば分かるように、様々な方の尽力の賜物です。

Luke の特徴

  • インデックスされている文書の閲覧
  • インデックスされているタームを、頻度順で表示
  • 検索の実行と結果の分析
  • 特定の文書の削除
  • ドキュメントのフィールド構成の変更と再インデックス
  • インデックスの最適化

起動

Luke の起動に必要な lucene-luke.jar は Solr の配布物には含まれていないので Lucene をダウンロードします。 ダウンロードしたら展開して luke/luke.sh を実行します。これだけで良くなったので、以前に比べると断然使いやすくなりました。

tar zxf lucene-8.1.0.tgz
cd lucene-8.1.0
luke/luke.sh

起動直後に開くダイアログで、Solrのインデックスが格納されているディレクトリ指定します。

インデックスブラウザ

Overviewのタブでは、インデックスのフィールド毎に頻度の高い順にタームを表示することができます。

wikipedia-ja を Kuromoji の normal モードで形態素解析した場合
wikipedia-ja を Kuromoji の extended モードで形態素解析した場合

たとえば同じ Wikipedia-ja をインデックスした場合でも、Kuromoji の normal モードを使うか extended モードを使うかでインデックスの内容が大きく異なることが分かります。

extended モードでは未知語が uni-gram に分割されるという特性を反映して、上位の多くを “e”, “t”, “r” などのアルファベット1文字のタームが占めています。normal モードでは “年”, “月”, “日” や数字など1文字のタームに加えて”category”,”リンク”,”外部”,”脚注”などWikipediaで頻出の用語も上位に来ています。

おわりに

上に挙げたような、インデックスの内容を直接参照するような使い方の他にも

  • 特定の文章が期待通りのタームに分割されているか調べる
  • 期待通りの検索結果を得るためのクエリを試行錯誤する
  • Analyzerを切り替えたときの形態素解析結果の違いを調べる

など、開発に役立つ機能が満載です。

使いやすい形で配布されるようになった Luke を活用していきたいと思います。

軽い熱中症になったので調べてみた_:(´ཀ`」 ∠):_


残暑が厳しいですがいかがお過ごしでしょうか?


私事ですが、この夏に帰省した際、軽い熱中症になり2日間寝込んでおりました。実際に医者にいったわけではありませんが、周りから熱中症じゃないかと言われ、おそらく間違いないのかなと。


私の場合は、とにかく頭が熱い感じで頭痛とフラつきがひどく、さらに胃のムカつきもあり、かなりしんどかったです。


室外で激しい運動をしたワケでもなく罹ってしまったので、誰にでも起こりうるものであると実感しつつ、熱中症についての知識が薄っすらとしかなかったので調べてみる良い機会になりました。まだまだ猛暑は続きます。本記事が熱中症のご理解、対策の一助になれば幸いです。

意外と知らなかった熱中症の4つの種類

今ままで知らなかったのですが症状別にタイプがあるようです。

①熱失神

皮膚血管が拡張して血圧が低下。脳への血流が少なくなり、めまい・失神などの症状がおこる。

②熱けいれん

大量に汗をかくと血液中の塩分の濃度が高くなる。この状態で水だけを補給してしまうと、血液の塩分濃度が低下してしまい、足、腕、腹部などの筋肉に痛みを伴ったけいれんが起きる

③熱疲労

大量の汗をかいて水分補給が追いつかず脱水状態になり、脱力感、倦怠感、めまい、頭痛、吐き気が見られる。

④熱射病

高温環境下で体温が40度以上に上昇し脳の温度も上昇。中枢神経が異常をきたして意識障害~全身の臓器に障害がでるなど最も危険な状態。


私自身のケースを思い返してみると症状的に③熱疲労が近かったのかなと思います。原因として思い当たるのは….

・夏バテで食欲が下がっていた中、寝不足で体力が落ちていた

・帰省での移動、いつも以上の荷物を持ち歩くことでの疲労が蓄積

・水分をしっかり取れていなかった

体力が落ちている時であれば、外出程度でも発汗などでかなり体力が奪われてしまうので、いつも以上に適切な水分補給を意識することが大切だったのかなと振り返っています。

熱中症のメカニズム

では熱中症ってどういうメカニズムで起こるのか?敵を知ることは大切です。

・体温が37を超えると皮膚の血流量を増やして熱を放出しようとする

・気温が体温より高くなると、空気中への熱の放出が難しくなる

 

・体温調整は発汗だけに頼ることになる

 

・血流の増加にともない血液が一時的に不足している状態で発汗による水分が減ると、血管が収縮して熱放出しなくなる

・気温だけでなく湿度も75%以上になると、汗をかいても蒸発しなくなり、発汗による体温調整が効きにくくなる

湿気がまとわりついて汗が流れずにひたすらベタベタしてる…蒸し暑い日は特に要注意ということですね。要するに体内温度を如何に下げるのかが重要なので、涼しい場所に移動するなり、水分を摂取して発汗を促進させる・血液濃度を低下させることが大切であるということだと思います。

そこで経口補水液を飲んでみた

はっきりいって美味しくはないですwwwwww

食塩水にほんのりポカリスエット味がついているような、ちょっとドロっとした飲みごたえw薄めた海の水を飲んでるような感じです。常用するようなものではなさそうですが、いざ熱中症になってしまったら信頼できそう。

OS-1の公式サイトを確認すると水分の吸収効率はかなり良いようです。

参照:[大塚製薬] OS-1の臨床試験結果

経口補水液の注意点

経口補水液の塩分と糖分のバランスは点滴に使われる輸液とほぼ同じらしく、冷やさずに少量ずつゆっくり時間をかけて飲まないといけないようです。短時間で大量に飲んだりすると塩分と水分のバランスが崩れて逆に脱水症状になる恐れがあり、様子をみながら別で水分や栄養分も摂らないといけないみたい。

参照:経口補水液(OS-1)って、飲み過ぎると良くないってホント?【熱中症対策】

まとめ


・熱中症は大きく4タイプに分かれる

・いずれも発汗や血流量の増加による水分不足が大きな原因になることが多い

・体内温度を下げるだけでなく、血流の正常化のためにも水分補給が重要

・経口補水液は美味しくないけど効く。ただし使用上の注意点をしっかりと守ることが大切

結局体内の温度を下げることが肝心なので、喉がかわいたと感じる前に水分を取る。意識してこまめな水分補給が大切。

炎天下の中でスポーツ・レジャーをする場合では1日1リットル足らずでは不十分とのこと。大げさかもしれませんがちょっとした外出でもお茶や水、清涼飲料水、塩分補給のタブレットなどを常に持ち歩くぐらいでちょうどいいのかもしれません。

PS.こういう類の記事だといらすとやはほんと助かるw

巨大なJSONをSolrに投入する

今回は小ネタです。

先日、1GB近くある巨大なJSONファイルをSolrに投入する機会がありました。とあるシステムからダンプしたデータで、以下のような形になっています。

[{"id":"10001","name":"名前1","description":"説明文1","timestamp":"2018-01-01 12:00:00"},{"id":"10002","name":"名前2","description":"説明文2","timestamp":"2018-01-02 12:00:00"},{"id":"10003","name":"名前3","description":"説明文3","timestamp":"2018-01-03 12:00:00"},{"id":"10004","name":"名前4","description":"説明文4","timestamp":"2018-01-04 12:00:00"},{"id":"10005","name":"名前5","description":"説明文5","timestamp":"2018-01-05 12:00:00"},...]

要するに、改行のない巨大な1行のテキストファイルです。
SolrにJSONファイルをPOSTしてインデックスを作成させることはできますが、1GBはちょっと大きすぎるので、分割することを考えました。

1行1レコードになっていれば話は簡単で、適当な行数で分割してからJSONの配列になるように加工すればいいだけのことですが、全部が1行になっているのでそういう訳にはいきません。

スクリプト言語でJSONを読み込んで分割することも考えましたが、JSON全体を一括で読み込んで処理するタイプのJSONパーサーでは1GBを扱うのは辛いものがあります。SAXタイプのJSONパーサーを探さないといけないかなあと考えているうちに、jq コマンドを使うのがいいんじゃないかと思い当たりました。

$ jq '.[]' sample.json
{
  "id": "10001",
  "name": "名前1",
  "description": "説明文1",
  "timestamp": "2018-01-01 12:00:00"
}
{
  "id": "10002",
  "name": "名前2",
  "description": "説明文2",
  "timestamp": "2018-01-02 12:00:00"
}
{
  "id": "10003",
  "name": "名前3",
  "description": "説明文3",
  "timestamp": "2018-01-03 12:00:00"
}
{
  "id": "10004",
  "name": "名前4",
  "description": "説明文4",
  "timestamp": "2018-01-04 12:00:00"
}
{
  "id": "10005",
  "name": "名前5",
  "description": "説明文5",
  "timestamp": "2018-01-05 12:00:00"
}

一番外の配列を外して各レコードを取り出すことはできました。1レコード1行になっていると加工しやすいので-cオプションを指定します。

$ jq -c '.[]' sample.json
{"id":"10001","name":"名前1","description":"説明文1","timestamp":"2018-01-01 12:00:00"}
{"id":"10002","name":"名前2","description":"説明文2","timestamp":"2018-01-02 12:00:00"}
{"id":"10003","name":"名前3","description":"説明文3","timestamp":"2018-01-03 12:00:00"}
{"id":"10004","name":"名前4","description":"説明文4","timestamp":"2018-01-04 12:00:00"}
{"id":"10005","name":"名前5","description":"説明文5","timestamp":"2018-01-05 12:00:00"}

ここまでくれば後は簡単で、1000行程度ずつ読み込んでまとめてPOSTするスクリプトを作成して無事に投入することができました。

夏のマストアイテム携帯扇風機

こんにちわ。
リエです。

連日猛暑日が続いておりますが、いかがお過ごしでしょうか。

まだまだ暑い日がずっと続きそうなので、この夏から私もハンディファンを利用しています。
日本でのハンディファンの火付け役はFrancfrancの「フレ 2WAY ハンディファン」が有名ですよね。


私もこのハンディファンにはすごく助けられています。
購入するまではハンディファンって風力弱いんじゃないの?と思っていましたが、風力が5段階あり小型ながらにしっかりと風を感じることができるので、もう手放せません。(回し者ではありません)しかも軽い!

Francfrancのハンディファンめっちゃいいで!と熱弁しまくってたら、母親と姉も購入していました。(まさかの家族でおソロ)

ハンディファンは各社によって色々タイプがあるのでどれにするのか悩みますよね。

中でも首掛け式の携帯扇風機は昨年はあまり見かけませんでしたが、今年は街でもチラホラ利用者を見かけるようになりました。
ハンズフリーで便利だと思いますがDJ扇風機と言われるようにDJ感があって私はまだ利用には抵抗感があります。。

利用している方を見ると未来感を感じちゃいます。

ハンディファンとSUN BARRIER100の最強ペアで暑い日々を乗り切りたいと思います。
追伸:SUN BARRIER100について気になった方は、ぜひこちらのブログを見てね☆
https://blog.splout.co.jp/8502/

大腸内視鏡検査を受けました

はじめに

会社の定期検診で便潜血陽性の判定が出てしまったので大腸の内視鏡検査を受けました。胃カメラは飲んだことがないので初内視鏡です。検査の準備も含めていろいろと珍しい体験だったのでそれを書いてみます。

検査の予約

要精密検査の判定を受けて、大腸の内視鏡検査を受けられる病院を探しました。都合よく徒歩10分くらいの近所に内視鏡検査が得意なお医者さんがいる内視鏡クリニックがあったので検査の予約をしました。大学病院で長く内視鏡検査を勤めてきた方だそうです。今どきは病院での検査もウェブで予約できるので便利ですね。

事前診察

検査の2日前までに事前の診察を受けて下さいとのことだったので、こちらもウェブで予約して診察を受けました。便潜血が出たこと、内視鏡検査は初めてであることなどを話し、検査までの流れの説明を受けてこの日は終わりです。

検査のときは腸内を空っぽにしておく必要があるため、検査前日の食事は食べていいもの悪いものの制限があるそうです。検査向けのレトルトパックの食事もありますがどうしますか?とのことだったのでそれをお願いしました。前日の昼食と夕食の2食分です。

検査食と当日用の下剤をもらって帰りました。

前日

前日に食べた検査食です。

昼食。普通に会社で仕事してたので職場の電子レンジで温めて食べました。

夕食

昼食も夕食もどっちもおいしかったです。もっと味気ない感じかと思ってました。量が少ないのはまあしょうがない。ちなみに前日の朝食は特に制限ありません。

夜9時以降は絶食ですが、お茶などの水分は飲んでも大丈夫です。錠剤の下剤を飲んで就寝。

当日の朝

朝8時から下剤の摂取開始。

これに水を入れて下剤を作ります。

水を2リットル入れたところ。透明になるまでよく振らないといけません。このうち1リットルを1時間半かけてゆっくり飲みます。15分おきにコップ1杯のペース。

この日のハイライトはこの下剤でした。なにしろ不味い。機械っぽい臭いと生臭さとが入り混じった何とも言えない風味でコップ1杯を飲むのも一苦労です。下剤は誤飲を防ぐために不味くしてあると聞いたことがありますが、何もここまでしなくてもという味でした。下剤の種類によってはスポーツドリンクと変わりないような味のものもあるらしいいんですが。

早い人は割とすぐ効き始めるようですが、自分の場合はちょうど1リットル飲み終えたくらいからお腹が下り始めました。徐々に出るものがゆるくなっていき、5回目くらいにはほぼ透明な水のようなのしか出なくなりました。

下剤を飲み始めてからここまでで約3時間半。朝から病院に行って専用の部屋で下剤を飲む選択肢もありましたが、家にしておいて良かったと思いました。いつもの環境で気を紛らわせながらでなかったら時間を持て余すところでした。

検査

昼の1時に病院に行き、受付を済ませたら検査着に着替えます。このころにはもうお腹の具合も収まってます。作務衣みたいな検査着のズボンの形が面白くて、お尻の部分にスリットが入っています。着たまま内視鏡を入れられるようになっているんですね。漠然とお尻丸出しをイメージしてたんですが、考えてみればそれはそうかという感じです。

検査室で横になってしばらく待っていると先生が入ってきて鎮静剤を打ってくれました。そこで指示通りに大きく深呼吸したら頭がふわぁっとなって後はうつらうつらしてる内に検査は終わってました。痛いも怖いも感じる暇は無し。というよりいつ入ってきていつ出ていったのかも覚えてません。

その後別室で1時間ほど休養して眠気が覚めてから検査結果の説明を受けました。ポリープを1個取った以外は異常なしで、腸内は綺麗なものだということでした。取ったポリープは検査に回されて、後日良性の判定をいただきました。

おわりに

今回の検査で大きな問題が見つからなかったので、この先少なくとも5年程度は大腸がんの心配は無いそうです。ただしポリープが出来てたら早めに取ってしまった方が良いので2年に1回くらいは内視鏡検査を受けましょうとのことでした。またあれを1リットル飲むのかと思うとげんなりしますが、自分の体のためにまた2年後もがんばって検査を受けようかと思います。