k4200’s notes and thoughts

Programmer side of k4200

Solr 4にて、基本はbi-gramだけど、1文字の検索にも対応させる

昔はbi-gramの場合、CJKTokenizerFactory ってのを使っていて、自分が持っているSolr本にもそう書いてあるが、最近は、StandardTokenizerFactory + CJKBigramFilterFactory を使うらしい。詳しくはggrks。

bi-gramの場合、検索クエリーが1文字の場合に対応出来ない。その辺の詳しい話もネット上に色々あるはず。でも、CJKBigramFilterFactory には uni-gram を出力するオプションもあり、それを使うと1文字の検索に簡単に対応できる。schema.xmlのCJKBigramFilterFactoryを使っているところを以下のようにするだけ。詳しくはドキュメントを参照。

<filter class="solr.CJKBigramFilterFactory" outputUnigrams="true" />

後は、indexを再構築すれば完了。

余談

Solr便利っすね。

タイトルに「Solr 4にて」と書いたけど、CJKBigramFilterFactoryが入ったのは3.6から?

PECLのSolrエクステンションをSolr 4に対応させる

PECLのSolrエクステンションはSolr 4では動かない

PECLのSolrエクステンションがあるんだけど、Solr 4ではcommitが上手く動かない(モジュールの最新バージョン1.0.2でもNG)。原因は`waitFlush`というパラメータが廃止になった?ため。詳しくはこの辺を参照。

続きを読む

色んなSQLをSquerylで書くと?

Squryl で複雑なSQLを実行させたい

ORMって、ちょっと複雑なSQLを実行させようとすると面倒な事が多くて、みんな仕方なしに使ってること多くない?

という主観はさておき、Squrylの場合もドキュメントサンプルプログラムに載っている例以外の事をやろうとすると、ぐぐってMLのアーカイブの中から答えを探してこなきゃいけないって事が多いと思う。

今回は、複雑(と言っても大したことないんだけど・・・)なSQLとそれをどうSquerylで書くかをまとめてみた。

方針等

方針として、SQLを作って、それをSqurylで表現する。論理的に等価な別のSQLに書き直すってのは無しで。論理的に等価でも、DBMSの最適化で別の実行計画になる場合もあるので。

本記事で書くコードは、実際使っているコードからコピペしてテーブル名とかを書き換えたりしてるので、コンパイルが通らなかったりするかもしれないので、その際はご容赦を。

続きを読む

SquerylでPostgreSQLのpoint型のデータを書き込む(これは酷い)

やりたい事

他のORMと比べて便利かどうかは特に検討せずに、とりあえずSquerylを使ってる。

PostgreSQLにはgeometry関連の型があって、更に詳しく言うとPostGISとそうじゃないやつがあるんだけど、その辺の詳細は省略。今回扱うのは通常のpoint型の話。x, yの2次元の座標を扱うもの。

で、今回はその point 型の値を書き込む(その場しのぎの)方法をさらっと。

続きを読む

ElastiCache使用時のクライアント設定の注意点

AWS版のmemcachedElastiCache。一度セットアップしちゃえば、使い方は普通のmemcachedとほぼ同じなんだけど、そこはさすが(というか何というか)AWS。AutoDiscoveryという独自の機能もある。詳しくはこの辺を参照。

続きを読む

Impalaのアーキテクチャを少し調べてみた

前回、Dremelの論文を読んで、分かる範囲で説明した。

さて、前回の記事を書いた後、BigQueryのホワイトペーパー (miyakawa_taku さんありがとうございます)を紹介されたので読んでみた。論文の要約+BigQueryの紹介と言った内容。

今回は、まずはそのホワイトペーパーの内容を少し紹介して、その後にImpalaのアーキテクチャにたどり着ければという感じ。

BigQueryのホワイトペーパーに書いてあること

Google BigQueryとは、データをアップロードしてそのデータに対してデータ分析が出来るというサービス。GoogleがDremelとして発表したシステムを外部向けにしたもの、らしい。お値段はこの辺。比較的お手頃という印象。

さて、ホワイトペーパーの中身について見ていく。

続きを読む

Webの負荷テストをEC2上での分散環境で行う。

夢の(悪夢の)TV露出、それに備えて負荷テスト

Webサイト・サービスを立ち上げて順調に成長していくと、ニュースサイトや雑誌に載ったり、運が良ければTVに取り上げられたりする。プロモーション視点で言うと夢の様なTVデビューも、インフラ担当に取っては悪夢でしか無い、と。

不幸中の幸いな事に、TVに取り上げられる場合は日時が決まっているので、事前に負荷テストを行なってチューニング等の対策を行う時間が取れる。

今回はWebサービスの「負荷テスト」を行う方法の一つとして、Amazon EC2上に複数のインスタンスを立てて、そこから対象のWebサービスに負荷をかけていく方法について説明する。

続きを読む