【翻訳】elasticsearch-dsl-pyのドキュメント
背景
elasticsearch-dsl-pyはPython用のElasticsearch公式ライブラリです。
ググってもあまり情報が出てこなかったので訳してみました。
私自身のElasticsearchと英語の勉強を兼ねていますが、誰かの役に立てばいいなと思います。
翻訳
コチラ
github.com
お願い
やや濁した部分もあるので、間違いやご指摘がございましたらご連絡ください。
MySQLからElasticsearchにデータをインポートする
背景
アプリケーションを作る中で全文検索やらファセットが必要になったので、DBのデータをElasticsearchにインポートしようと思い立ちました。その際に試行錯誤した内容のまとめです。インストール周りの作業は基本的にansibleを使ってます。
方法の検討
2つの方法を試してみました。
(正確には片方を苦労してやったあとでもう片方を見つけて泣く泣くやり直した)
方法1. JDBC importer
The Java Database Connection (JDBC) importer allows to fetch data from JDBC sources for indexing into Elasticsearch.
Java DataBase Connectionに準拠しているソースのデータをインポートできる。業務のSolrにもこれ使ってた気がするし、スター1000個もついてるし安心!と思いました。
方法2. Embulk
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でぼやいてたんですが
まさかのアドバイスを頂いてすごく嬉しかったので、該当箇所を翻訳してみました。
オリジナル
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されている
aaa
、AAA
、bbb
、BBB
の4つの文字列を使います。
アルファベット順にソートしたいので、求める結果は以下の通り。
(ascかdescの指定が必要ですが、今回は重要じゃないので割愛)
aaa AAA bbb BBB
ですが、単純にソートを指定すると以下のような結果になります。
AAA BBB aaa bbb
文字コードにして並べた結果
小文字のaより大文字のBが優先されたんでしょうか。
この躓きを回避するための記事です。
Vagrantで開発環境構築
macのローカルを開発用途でごちゃごちゃしたくなかったので Vagrantで仮想の開発用環境を作ることにしました。
Vagrant
Vagrantは、 あなたとあなたのチームの生産性/柔軟性を最大限にする手助けをするために、 簡単な環境設定/複製可能なマシン/業界標準の技術で構築された1つの一貫したワークフローによって制御される可搬的な開発環境を提供します。
その恩恵を得る為に、Vagrantは先人の知見に基づいています。 マシン(開発環境のマシン)は、ViretualBox, VMWare, AWS, そのほかのプロバイダにより提供されます。 そして、シェルスクリプト/Chef/Puppet といった業界標準的に提供されているツール類は、 マシン上のソフトウェアを自動的にインストール/設定するために使用されます。
仮想環境を作る際に、VirtualBoxとかを単一で使ってごちゃごちゃと作る手間を軽減して
あっさり作ってポイ捨てすることができるものだと理解。
日本語ドキュメント、とてもありがたいですね。
手順
VirtualBoxのインストール
Downloads – Oracle VM VirtualBox
VirtualBox 4.3.20 for OS X hosts x86/amd64
ここからダウンロードができる。(2015/02/07現在)
インストールはパッケージを開いてひたすら従っていけばOK。
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
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。
続きを読む