疑問文

PythonとかRubyについて、疑問や学びをまとめる場所

勉強しないと。しないと。

【翻訳】elasticsearch-dsl-pyのドキュメント

背景

elasticsearch-dsl-pyはPython用のElasticsearch公式ライブラリです。
ググってもあまり情報が出てこなかったので訳してみました。
私自身のElasticsearchと英語の勉強を兼ねていますが、誰かの役に立てばいいなと思います。

翻訳

コチラ
github.com

お願い

やや濁した部分もあるので、間違いやご指摘がございましたらご連絡ください。

MySQLからElasticsearchにデータをインポートする

背景

アプリケーションを作る中で全文検索やらファセットが必要になったので、DBのデータをElasticsearchにインポートしようと思い立ちました。その際に試行錯誤した内容のまとめです。インストール周りの作業は基本的にansibleを使ってます。

方法の検討

2つの方法を試してみました。
(正確には片方を苦労してやったあとでもう片方を見つけて泣く泣くやり直した)

方法1. JDBC importer

github.com

The Java Database Connection (JDBC) importer allows to fetch data from JDBC sources for indexing into Elasticsearch.

Java DataBase Connectionに準拠しているソースのデータをインポートできる。業務のSolrにもこれ使ってた気がするし、スター1000個もついてるし安心!と思いました。

方法2. Embulk

github.com

Embulk is a parallel bulk data loader that helps data transfer between various storages, databases, NoSQL and cloud services.

Embulk supports plugins to add functions. You can share the plugins to keep your custom scripts readable, maintainable, and reusable.

OSSのデータ転送ソフトウェア。fluentdのバッチ版と言えばわかりやすいらしいけど、実はfluentdをまともに使ったことがなかった。データ転送のインプットとアウトプットがプラグインになっていて、input-mysqlとoutput-elasticsearchを使えば今回の目的は達成できそう。

結論

どちらの方法でも今回の作業は可能。ただ、Embulkの方はインプットとアウトプットを他のデータストアに変えても使えそうだったので、つぶしが効くというメリットでEmbulkを使うことにしました。

ただせっかく両方やったので、作業内容と注意点は両方とも書いてみます。

続きを読む

【翻訳】Elasticsearchにおけるマッピングの更新

背景

オープンソース検索エンジンといえばSolr!というイメージで、Solrしか使ったことがなかったんですが、作りたいアプリケーションの都合で今回はElasticsearchを使ってみることにしました。わからないことばかりでTwitterでぼやいてたんですが

f:id:nanakenashi:20150925233710p:plain

まさかのアドバイスを頂いてすごく嬉しかったので、該当箇所を翻訳してみました。

オリジナル

Elasticsearch: The Definitive Guide Mapping
https://www.elastic.co/guide/en/elasticsearch/guide/current/mapping-intro.html#updating-a-mapping

続きを読む

Solrでアルファベット順にソートする

Solrの検索結果をアルファベット順で上手にソートすることができず
日本語で検索してもなかなか参考になるものがなかったのでまとめ。

参考
SOLR 4.0 alphabetical sorting trouble - Stack Overflow

背景

今回は例として、ex_nameフィールドでindexingされている
aaaAAAbbbBBBの4つの文字列を使います。
アルファベット順にソートしたいので、求める結果は以下の通り。
ascかdescの指定が必要ですが、今回は重要じゃないので割愛)

aaa
AAA
bbb
BBB

ですが、単純にソートを指定すると以下のような結果になります。

AAA
BBB
aaa
bbb

文字コードにして並べた結果
小文字のaより大文字のBが優先されたんでしょうか。
この躓きを回避するための記事です。

続きを読む

AnsibleでGit(2.X)をインストール

yumモジュールを使って簡単にインストールはできそうなんですが
1.7.1とあまりに古い子がいたので、入れ直しました。
その際に地味にはまったのでメモ。

環境

Mac OSX(ローカル)
Vagrant仮想環境 CentOS 6.5

雑ですがまあそんなに影響しないと思うので…。

続きを読む

Vagrantで開発環境構築

macのローカルを開発用途でごちゃごちゃしたくなかったので Vagrantで仮想の開発用環境を作ることにしました。

Vagrant

Vagrant Vagrant日本語ドキュメント

Vagrantは、 あなたとあなたのチームの生産性/柔軟性を最大限にする手助けをするために、 簡単な環境設定/複製可能なマシン/業界標準の技術で構築された1つの一貫したワークフローによって制御される可搬的な開発環境を提供します。
その恩恵を得る為に、Vagrantは先人の知見に基づいています。 マシン(開発環境のマシン)は、ViretualBox, VMWare, AWS, そのほかのプロバイダにより提供されます。 そして、シェルスクリプト/Chef/Puppet といった業界標準的に提供されているツール類は、 マシン上のソフトウェアを自動的にインストール/設定するために使用されます。

仮想環境を作る際に、VirtualBoxとかを単一で使ってごちゃごちゃと作る手間を軽減して
あっさり作ってポイ捨てすることができるものだと理解。
日本語ドキュメント、とてもありがたいですね。

手順

mac内に環境を構築するので、基本はGUIです。

VirtualBoxのインストール

Downloads – Oracle VM VirtualBox

VirtualBox 4.3.20 for OS X hosts x86/amd64

ここからダウンロードができる。(2015/02/07現在)
インストールはパッケージを開いてひたすら従っていけばOK。

Vagrantのインストール

Download Vagrant - Vagrant

MAC OS X
Universal (32 and 64-bit)

ここからダウンロードができる。(2015/02/07現在)
インストールはパッケージを開いてひたすら従っていけばOK。

完了したら、ターミナルからvagrantコマンドが使えるかどうか確認。

$ vagrant --version
Vagrant 1.7.2

Boxのインストール

仮想環境のベースになるもので
これをテンプレートに、それぞれの環境を作る。
vagrant box add {box_name} {source_url}を打ち込む。
↓ に置いてあるものを使えるらしい。
A list of base boxes for Vagrant - Vagrantbox.es

$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

$ vagrant box list
centos65 (virtualbox, 0)

仮想環境の初期化

入口にしたい任意の場所にディレクトリを作成。

$ mkdir -p ~/Vagrant/dev-env
$ cd ~/Vagrant/dev-env

仮想環境作成準備、すなわち初期化。
initの引数として先ほど作成したBoxを指定。
完了したらVagrantfileという設定ファイルが作成されるはず。

$ vagrant init centos65

$ cat Vagrantfile

仮想環境の起動

事前にVirtualBoxを起動しておきます。
LaunchPadか何かから起こすだけでOK。
(「新規」とかで何かを準備しておく必要もなし)

やっと起動できます。

$ vagrant up

仮想環境の使用

sshで入れます。

$ vagrant ssh

まとめ

お手軽でしたが、複数起動したりsshの設定変えたりするには
Vagrantfileをもっとゴニョゴニョするらしいです。
これだけ簡単なら、そりゃ普及するよなあ…とボソリ。

Pythonのバージョン管理

Pythonのバージョンを管理します。

事前知識

pyenv

yyuu/pyenv · GitHub

pyenv lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.

Python複数のバージョンを管理し
グローバルあるいはローカル(ディレクトリ)に対して任意のバージョンを指定できる。

virtualenv

Virtualenv — virtualenv 12.0.7 documentation

virtualenv is a tool to create isolated Python environments.

バージョンを複製することで
同じバージョンでも違うパッケージ構成にしたいときに使える。
virtualenvは単体で動作するが、pyenvのpluginとして提供されるのがpyenv-virtualenv。


続きを読む