Elasticsearchを導入してみた

Windows7のサポート終了で余ったPCが出てきたので、CentOSをインストールしてElasticsearchに手を出してみました。

全文検索に向け、ジャブを放ってみます。

# Elasticsearchってなに?

オープンソースの全文検索エンジンです。速いらしいのと、日本語も中国語にも対応している(形態素解析による検索が可能)ということで選びました。

詳しくはElasticsearchにて。

# Elasticsearchのインストール

公式ドキュメントを見ながら、yumでインストールできます。

firewallをいじって、社内LANからのアクセスと9200番ポートを開けておきます。

# 読み込み元のファイルをつくる

Wordからテキストを抽出するで書いたPowerShellスクリプトを微修正して、ファイルパスなどを書き込めるようにします。とりあえず1000ファイルほどを作ってみました。

次にバルクインサートを参考に、JSONライクなファイルにまとめます。

バルクインサート用のファイルは、

  • 命令行 {index: {}}
  • 内容行

を交互に記述するようですので、JSONファイルを一行にしなければいけないのですが、PowerShellのConvertTo-Jsonは-Compressオプションを付けるだけでできて便利。

$files = Get-ChildItem *.json -file
$output = "./indices.json"
foreach($file in $files){
	$content = Get-Content $file -Encoding UTF8 | ConvertFrom-Json
	Write-Output "{'index': {}}" | Add-Content $output -Encoding UTF8
	ConvertTo-Json $content -Compress | Add-Content $output -Encoding UTF8
}

# 読み込みの実行

あとは”/_bulk”にPOSTするだけです。curlで一発です。

# 検索方法と使用感

"/_search"に検索クエリーをPOSTするのですが、思ったよりも形態素解析が効かない?

一文字でも含まれていた場合、Hitとして返してくることが多いと思います。この辺りは形態素解析の結果をテストしながら見るしかないのかも。

一旦はあいまい検索のようなものは諦めて、"match_phrase"を使うことにしました。

まだ中国語のテストや検索クエリーの最適化、ドキュメントの構造化など、課題は多い感じです。また、実際の翻訳物の全文検索をするには、フォルダ構成・命名規則など、より規範化を進めていかなければ人力による部分が大きくなりそうです。

これからも随時「全文検索」ネタを投稿していきます。

# PR

ここで紹介するPowerShellの小技をまとめました!

ゴールデンブリッジでは、
翻訳・通訳・インバウンドツアー・国際会議運営など
ご用命をお待ちしております!
また、翻訳に関わるツール・ソフトウェアの開発等についてもお気軽にお声掛けください。

株式会社ゴールデンブリッジ 公式Webサイト