「Elasticsearchって何?」
Elasticsearchとは
Javaで記述された全文検索ソフトウェアである!
※引用 「Lucene」(ルシーン) Javaで記述された全文検索ソフトウェアである。
あらかじめ蓄積した大量のデータから、指定したキーワードを探し出す機能を持つ。
Javaのクラスライブラリとして提供される。
Q.OracleやMySQLでいいのでは!?
A.データベースによって得意不得意があり大規模データの蓄積・活用において、すべてのユースケースに柔軟に対応出来るデータストアが存在せず、それぞれのデータストアはある目的に特化して進化しているためです。
DBの種類(大雑把に)
MySQL:
矛盾なく永続化することに特化したデータベース
メリット:: SQL と言う高度なクエリ言語、検索トラフィックに対するシステムの拡張は得意
デメリット:: データ量の増加や書き込み速度の拡張は苦手
Redshift(AWS):データウェアハウス系のデータベース
メリット:: 大規模なデータの蓄積・分析は得意
デメリット:: 不特定多数のクライアントから同時に利用され、検索リクエストが大規模なユースケースには不向き
DynamoDB(AWS):NoSQL
メリット::幅広い種類の膨大な量のデータを高速かつ動的に整理し分析することが可能
デメリット::非リレーショナルな広域分散データベースシステムです。その反面複雑なクエリやソートなどが苦手
「RDBMS」と「全文検索エンジン」の違い
「RDBMS」は、検索条件にマッチするデータを正確に返す。 Elasticsearchのような「全文検索エンジン」は、「検索条件との関係性/関連性が高いデータを抽出して返す」という特徴がある。 (Elasticsearchの結果に_score:xxxxと数値が出力される)
Elasticsearchが得意なこと
・高度なリアルタイム分析
・大規模分散
・高可用性
・マルチテナンシー
・全文検索
・ドキュメント指向
・スキーマフリー
・RESTfulAPI
・データ保護機能
・形態素解析や n-gram など自然言語的な解析
・簡単にスケールアウト
使い所 検索(形態素解析) サジェスト ランキング(ソート) コンテンツの一覧表示 ページング ログの収集 etc....
複雑なクエリもかけ複数の機能実装が必要な箇所が、クエリ一発で実装が可能になったりとても便利なものです。
さらに、Elasticsearchのデータを可視化を可能にするKIBANAもあります。
KIBANAにはこう書かれています。
1枚の画像は何千行のログ行に勝る
本当にその通りだとおもいます。テキストと画像では見たときの情報量が圧倒的に違います。
データの解析だけに限らず、使用できる箇所は全文検索エンジン使ってみてはどうでしょうか?