はじめに
第1章 Elasticsearchで実践するはてなブログの記事解析
第2章 日本語検索エンジンとしてのElasticsearch
第3章 Elasticsearch SQL
第4章 はじめてのElasticsearchクラスタ
謝辞
本書を手にとっていただきありがとうございます。
近年、企業が収集するデータ量は日々増加し、膨大なデータの中から必要とするデータを獲得したいニーズが高まっています。そのような膨大なデータを検索するソフトウェアのひとつがElasticsearchです。
世界で人気があるデータベース・ソフトウェアがわかるサイト“DB-Engines Ranking(https://db-engines.com/en/ranking)”において、Elasticsearchはデータベース・ソフトウェア全体で8位、検索ソフトウェアとして1位の人気となっています(2019年2月現在)。5年ほど前はほとんど知られていなかったことを考えると、今もっとも人気が上昇している検索ソフトウェアといえます。
本書は、Elasticsearchやデータ分析の業務を数多く担当してきたAcroquest Technology株式会社の有志が執筆し、実践的な内容を数多く盛り込みました。読み終わった皆様が本書を手に取る前より、実践的なElastic Stackの活用ができることを願っています。
本書は独立したテーマからなる4つの章から構成されています。そのため、興味ある章から自由に読み進められるようになっています。
第1章「Elasticsearchで実践するはてなブログの記事解析」では、Elasticsearch、Kibana、Pythonを使って当社の技術ブログ「Taste of Tech Topics」(http://acro-engineer.hatenablog.com/)を分析します。Elasticsearchで日本語のデータ分析に挑戦したい方に向けて、Elasticsearchの設定やKibanaでの可視化について解説します。
第2章「日本語検索エンジンとしてのElasticsearch」では、Elasticsearchで日本語を全文検索する際の課題に触れた後、解決策として形態素解析器のSudachiを紹介します。
第3章「Elasticsearch SQL」では、バージョン6.3で導入されたSQL機能の概要およびその使い方、しくみを紹介します。
第4章「はじめてのElasticsearchクラスタ」では、分散システムとしてのElasticsearchの動作と、運用前に行うべき設計のポイントを説明します。設計時の考察が不足することで問題となる事例を紹介し、安全にElasticsearchクラスタを運用できるようにします。
本書が対象とする読者は、Elasticsearchを多少触ったことがあり、より実践的な次の一歩を踏み出そうとしている方です。そのため、Elasticsearch、Kibanaの起動・簡単な設定の編集といった基本的な知識が身についていることを前提としています。高度な知識は必要ありませんが、Elasticsearchをまったく触ったことがない方には難しい内容かもしれません。
Elasticsearchは検索、複数ノードによる検索の分散化など、非常に多くの機能をもっています。これらの機能を使いこなすには、ノウハウやテクニックが必要です。そのため、Elasticsearchを使いこなそうとすればするほど、Elasticsearchのことを深く知る必要があります。本書はElasticsearchを使いこなしたい方が次の一歩を踏み出せるよう、実例やハマりがちなポイントを紹介します。
本書は、Elastic Stack 6.6.0を元に記述しています。そのため、他のバージョンでは動作が異なる場合があります。あらかじめ、ご了承ください。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書籍は、技術系同人誌即売会「技術書典5」で頒布されたものを底本としています。
本章では、Elasticsearchを利用した分析の例を紹介します。
Acroquest Technologyでは、所属するエンジニアが執筆する技術ブログ「Taste of Tech Topics」(http://acro-engineer.hatenablog.com/)を公開しており、月間PV30000前後のアクセスがあります。このブログには現在の会社のトレンドや技術の傾向が表れるため、内容を分析すれば隠れた知見を発見できる可能性があります。今回はElasticsearch、Kibana、Pythonを用いてブログ記事の分析を行います。
まず、Elasticsearch、Kibana、Pythonを準備します。Elasticsearch、Kibanaは公式サイト(https://www.elastic.co/jp/products)から取得できます。また、Pythonも公式サイト(https://www.python.org/downloads/)よりインストールします。本章で検証したバージョンは表1.1をご確認ください。本章では、macOS Mojave(10.14)で実行しています。OSにより、動作の異なる場合があります。あらかじめ、ご了承ください。
Software | Version |
Elasticsearch | 6.6.0 |
Kibana | 6.6.0 |
Python | 3.6.0 |
Pythonを利用して、はてなブログのデータをElasticsearchに投入できる形式へ変換し、Elasticsearchにリクエストします。そのため、Pythonで利用できるElasticsearchのクライアント・ライブラリーが必要です。Pythonのライブラリーを管理するpipを利用できる環境であれば、次のコマンドを実行してインストールします。
$ pip install elasticsearch
最初にElasticsearchの準備を行います。
日本語のドキュメントを検索をするために、形態素解析と呼ばれる処理が必要となります。形態素解析とは、日本語として意味をもつ表現要素の最小単位を形態素といい、文章中の形態素を判別して分解するものです。Elasticsearchで形態素解析を行うKuromojiプラグインが提供されており、今回はこれを利用します。
まずは、Kuromojiプラグインのインストールを行います。Elasticsearchをインストールしたディレクトリーで、次のコマンドを実行します。
$ bin/elasticsearch-plugin install analysis-kuromoji
本章では、大きく分けてふたつの作業を実施します。全体の構成を図1.1に示します。
始めにElasticsearchに投入したいデータを取得します。はてなブログからデータをダウンロードします(①)。次にElasticsearchへ日本語検索のためのマッピング定義を登録する処理が必要です(②)。最後にPythonでElasticsearchへ投入できる形式に変換・投入します(③、④)。
Elasticsearchに投入したはてなブログのデータをKibanaで可視化します。今回、Kibanaで複数種類のVisualizeを作成します。そして、作成したVisualizeを用いたDashboardを作成します(⑥)。⑤はVisualize、Dashboard可視化時のデータ取得を示します。