Elasticsearch概要

Author:Makito

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もあります。

1枚の画像は何千行のログ行に勝る

本当にその通りだとおもいます。テキストと画像では見たときの情報量が圧倒的に違います。

データの解析だけに限らず、使用できる箇所は全文検索エンジン使ってみてはどうでしょうか?


この記事が気に入ったらサポートをしてみませんか?