会社で groonga を使うことになりました。 groonga でないと取得できないデータがあったんです。
groonga も含め 全文検索エンジンを使うのは初めてだったので、 公式ドキュメントを見ながら探っていきました。 データベースで使用する SQL と groonga のクエリを比較してみると次のようになりました。 もともと別物なので参考程度に見ていただければと思います。
SELECT
データを取得するときは、 Database でも groonga でも SELECT
を使います。 でも、構文の構成はだいぶ違います。 groonga では、次のような命令になります。
|
select --table Site --query title:@test --output_columns _id,_score,title --sortby -_score,_id |
簡単に比較すると次の表のようになります。
|
Database |
groonga |
表示カラム |
(select の後ろに羅列) |
––output_columns |
テーブル |
from |
––table |
検索条件 |
where |
––filter , ––query , ––match_column , ––scorer |
順序指定 |
order by |
––sortby |
オフセット |
offset |
––offset |
件数指定 |
limit |
––limit |
グループ化 |
group by |
––drilldown (drilldown したときの件数指定などは下の説明を参照) |
論理演算子 |
and , or |
&& , || |
補足説明
- ––output_columns
-
検索結果に表示するカラムを指定する。カンマで区切ることにより、複数カラムを指定できる。
|
select --table Site --output_columns column1,column2 |
- ––query
-
全文検索を行う。
|
select --table Site --query title:@this |
title カラムについて 文字列 “this” の全文検索を行う。
- ––match_columns, ––query
-
検索結果に含めるカラムを指定する。複数指定もできる。
|
select --table Site --match_columns title --query this |
––query
と一緒に使い、 title カラムについて 文字列 “this” の全文検索を行う。
- ––filter
-
条件を指定する。 javascript など のように、 “==
”, “<=
“, “>
” などを使うことができる。 AND, OR は &&
, ||
で表現できる。
|
select --table Site --filter "_id <= 1" --output_columns _id,_key |
- ––drilldown
-
バージョン4.0.1 の資料を見るかぎり、 drilldown に指定したそれぞれのカラムについてグループ化した結果が表示される。 column_1 と column_2 を指定していれば、 column_1 だけでグループ化した結果と、 column_2 でグループ化した結果が続けて表示される。 ORDER BY column_1, column_2
のようなことはできない。
drilldown の結果に対する件数指定(オフセットなど)は下記のように、 通常の ––sortby
, ––offset
, ––limit
の頭に drilldown
をつけて指定する。 drilldown した結果だけがほしければ、 ––limit
に 0
を指定して出てくる通常カラムを制限する。
|
select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs --drilldown_limit 2 --drilldown_offset 2 |
特殊カラム
カラム名 |
説明 |
_id |
検索時に groonga が割り当てるID。 |
_key |
主キーを格納するカラム。 |
_score |
(Oracle DB でいう ROWNUM のような) 検索結果に含まれる仮想カラム。全文検索の条件に合致するレコードほど高い数値が入る。 |
_nsubrecs |
drilldown を使った場合に、 drilldown した結果件数が格納されるカラム。 SELECT COUNT(1) FROM … に似ている。 |
python のスクリプト(.py) を作って、スクリプト内で自分自身のファイル名を種痘する場合のお話です。
abc.py ファイル を実行した場合に、 abc.log のようなログファイルを作る際に使えます。
ここからは、次のようにしてモジュールを読み込む必要があります。
ディレクトリを除いたファイル名
ディレクトリに対してこれを実行すると、ディレクトリ名が取得できます。
ファイル名(拡張子なし)
|
path.splitext(path.basename(__file__))[0] |
“.” で文字列を区切ってリストにします。 “a.b.c” のように “.” が2つ以上ある場合は 最後の “.” で区切って (“a.b”, “c”) を返します。
path.basename(__file__)[0] をファイルの存在するディレクトリで実行した場合も同じ結果になります。 (crontab などで実行すると思わぬ結果になります。 “a/b.py” が (“a/b”, “.py”) になります。)
ディレクトリ
絶対パス
|
path.abspath(path.dirname(__file__)) |
上の相対パスを path.abspath
で絶対パスにしています。
お米1合はいくら(値段)になるでしょうか。茶碗1杯のお米はいくらになるでしょうか。 毎日弁当を持って行っているのですが、果たしてどれくらい節約になっているのか気になりました。
前提条件
一般的な数字で計算します。 今回は次のようにします。
- 炊飯前の 1合 のお米は 150g
- 茶碗1杯は 0.5合
お米 10kg を 3,000円 で買う場合を想定します。 茶碗1杯のお米は 75g なので 3,000(円) ÷ 100,000(g) × 75(g) = 2.25(円) になります。 もうちょっとお米のブランドを上げて 1kg 4,000円 にすると、 茶碗1杯で 3円 になります。 1度にどれだけ炊飯するかによりますが、 炊飯にかかる電気代を含めても 茶碗1杯 あたり 13円 です(電気代は関東電気保安協会の値を使用)。
お弁当、是非持っていきましょう。 ごはんだけでも。
コンビニのおにぎりだったらいくら
コンビニのおにぎりはいくらのお米を使っているのでしょうか。 計算のため、次の前提をおきます。
- コンビニのおにぎりに使われているお米は炊き上がり状態で 100g
- 150g のお米を炊くと 340g のごはんになる
コンビニのおにぎりは 100(g) × 150(g) ÷ 340(g) = 44g のお米に相当します。 先ほどの 10kg 3,000円 のお米では 44g は 3,000(円) ÷ 100,000(g) × 44g = 1.32(円) になります。
Ruby で サイトマップ を作成する gem を紹介します。
sitemap_generator
sitemap_generator を使うと、サイトマップが簡単に作成できます。 Ruby だけでも使えます……が、ここでは Rails の上で私が使用した方法を紹介します。
使用方法
環境は次の通りです。
- Ruby 2.0.0p451
- Rails 4.1.0
- sitemap_generator 5.0.2
Gemfile
に sitemap_generator
を 追加して bundle install
します。
rake sitemap:install
を実行します。 config/sitemap.rb
というファイルが作成されます。
- このファイルに記述したサイトマップ生成スクリプトは rake sitemap:refresh によって更新されます。
config/sitemap.rb
が作成される他は特になにも起こりません。 sitemap_generator
の tasks.rb
を覗いてみるとよくわかります。
sitemap.rb
を編集します。
- デフォルトでは ルート(“/”)へのサイトマップが3つ作成されます。 それら3つは
changefreq
が異なりますが、いらないので削除します。 コード内に SitemapGenerator::Sitemap.include_root = false
を記述します。
SitemapGenerator::Sitemap.create_index = true
を記述して、サイトマップのリストを作成します。
- サイトマップの作成を
ping
で通知します。 Google と Bing に届くように設定します。 Yahoo! は Google と検索エンジンが同じであるため Yahoo! の設定は必要ありません。
|
SitemapGenerator::Sitemap.ping_search_engines( :google => 'http://www.google.com/webmasters/tools/ping?sitemap=%s', :bing => 'http://www.bing.com/webmaster/ping.aspx?sitemap=%s') |
lastmod
, priority
, changefreq
などを出力したくない場合には、それぞれの値に nil
を設定します。
rake sitemap:refresh
が実効されるように、 crontab
に記述します。
母の日。それは、小売店によって仕掛けられた、販売促進戦略。
そんなことを考えていました。
しかし、妻から「母の日にお礼をしなかったらいつお礼するのー!」といわれ、仕方なくギフトを考えることに。
そもそも、そんなモノでしか繋がらない関係は希薄であり、母の日にしかお礼ができないのは大きな問題であると思うのだが。
メロン
メロン嫌いな人はいないです、きっと。新宿高野が家の近くにあったので(楽天にもありますが)、そこのメロンをまず考えました。
でも・・・高いですよね。お財布に余裕があればいいかもしれません。確かに今まで親にもらったお金は数知れず・・・。
そして、もうすこし安いのを探しました。
フルーツ盛り合わせ
新宿高野 でフルーツの盛り合わせを選びました。 店舗まで足を運ばなくても、 新宿高野 楽天市場店 で購入できます。 しかも楽天にしかない、限定ギフトもあります。
母から聞いたのですが、高野のフルーツはどれも食べ頃のものが選ばれているそうです。高野はおすすめです。
また、高野は母の日用のギフトは母の日に届くようにしてくれたり、母の日と父の日のギフトをセットでお安く買えたりします。くだものきらいな人はいないので、これは間違いないです。
A Life Summary of an Gypsy